{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 项目：用逻辑回归预测泰坦尼克号幸存情况"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分析目标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "此数据分析报告的目的是，基于泰坦尼克号乘客的性别和船舱等级等属性，对幸存情况进行逻辑回归分析，从而能利用得到的模型，对未知幸存情况的乘客，根据属性预测是否从沉船事件中幸存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 简介"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> 泰坦尼克号（英语：RMS Titanic）是一艘奥林匹克级邮轮，于1912年4月首航时撞上冰山后沉没。泰坦尼克号是同级的3艘超级邮轮中的第2艘，与姐妹船奥林匹克号和不列颠号为白星航运公司的乘客们提供大西洋旅行。\n",
    "\n",
    "> 泰坦尼克号由位于北爱尔兰贝尔法斯特的哈兰·沃尔夫船厂兴建，是当时最大的客运轮船，由于其规模相当一艘现代航空母舰，因而号称“上帝也沉没不了的巨型邮轮”。在泰坦尼克号的首航中，从英国南安普敦出发，途经法国瑟堡-奥克特维尔以及爱尔兰昆士敦，计划横渡大西洋前往美国纽约市。但因为人为错误，于1912年4月14日船上时间夜里11点40分撞上冰山；2小时40分钟后，即4月15日凌晨02点20分，船裂成两半后沉入大西洋，死亡人数超越1500人，堪称20世纪最大的海难事件，同时也是最广为人知的海难之一。\n",
    "\n",
    "数据集包括两个数据表：`titianic_train.csv`和`titanic_test.csv`。\n",
    "\n",
    "`titianic_train.csv`记录了超过八百位泰坦尼克号乘客在沉船事件后的幸存情况，以及乘客的相关信息，包括所在船舱等级、性别、年龄、同乘伴侣/同胞数量、同乘父母/孩子数量，等等。\n",
    "\n",
    "`titanic_test.csv`只包含乘客（这些乘客不在`titianic_train.csv`里）相关信息，此文件可以被用于预测乘客是否幸存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`titianic_train.csv`每列的含义如下：\n",
    "- PassengerId：乘客ID\n",
    "- survival：是否幸存\n",
    "   - 0\t否\n",
    "   - 1\t是\n",
    "- pclass：船舱等级\n",
    "   - 1\t一等舱\n",
    "   - 2\t二等舱\n",
    "   - 3  三等舱\n",
    "- sex：性别\n",
    "- Age：年龄\n",
    "- sibsp：同乘伴侣/同胞数量\n",
    "- parch：同乘父母/孩子数量\n",
    "- ticket：船票号\n",
    "- fare：票价金额\n",
    "- cabin：船舱号\n",
    "- embarked：登船港口\n",
    "   - C  瑟堡\n",
    "   - Q  皇后镇\n",
    "   - S  南安普敦\n",
    "   \n",
    "   \n",
    "`titianic_test.csv`每列的含义和上面相同，但不具备survival变量的数据，即是否幸存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们计划先利用`titanic_train.csv`训练预测模型，因此读取数据方面，当前只需要导入`titanic_train.csv`。\n",
    "\n",
    "通过Pandas的`read_csv`函数，将原始数据文件`titanic_train.csv`里的数据内容，解析为DataFrame并赋值给变量`original_titanic_train`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "original_titanic_train = pd.read_csv(\"titanic_train.csv\")\n",
    "original_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 评估和清理数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在这一部分中，我们将对在上一部分建立的`original_titanic_train`DataFrame所包含的数据进行评估和清理。\n",
    "\n",
    "主要从两个方面进行：结构和内容，即整齐度和干净度。\n",
    "\n",
    "数据的结构性问题指不符合“每个变量为一列，每个观察值为一行，每种类型的观察单位为一个表格”这三个标准；数据的内容性问题包括存在丢失数据、重复数据、无效数据等。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了区分开经过清理的数据和原始的数据，我们创建新的变量`cleaned_titanic_train`，让它为`original_titanic_train`复制出的副本。我们之后的清理步骤都将被运用在`cleaned_titanic_train`上。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "cleaned_titanic_train = original_titanic_train.copy()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据整齐度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>McCarthy, Mr. Timothy J</td>\n",
       "      <td>male</td>\n",
       "      <td>54.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>17463</td>\n",
       "      <td>51.8625</td>\n",
       "      <td>E46</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n",
       "      <td>female</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>347742</td>\n",
       "      <td>11.1333</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n",
       "      <td>female</td>\n",
       "      <td>14.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>237736</td>\n",
       "      <td>30.0708</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "5            6         0       3   \n",
       "6            7         0       1   \n",
       "7            8         0       3   \n",
       "8            9         1       3   \n",
       "9           10         1       2   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "5                                   Moran, Mr. James    male   NaN      0   \n",
       "6                            McCarthy, Mr. Timothy J    male  54.0      0   \n",
       "7                     Palsson, Master. Gosta Leonard    male   2.0      3   \n",
       "8  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0      0   \n",
       "9                Nasser, Mrs. Nicholas (Adele Achem)  female  14.0      1   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  \n",
       "5      0            330877   8.4583   NaN        Q  \n",
       "6      0             17463  51.8625   E46        S  \n",
       "7      1            349909  21.0750   NaN        S  \n",
       "8      2            347742  11.1333   NaN        S  \n",
       "9      0            237736  30.0708   NaN        C  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从头部的10行数据来看，数据符合“每个变量为一列，每个观察值为一行，每种类型的观察单位为一个表格”，因此不存在结构性问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据干净度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来通过`info`，对数据内容进行大致了解。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  891 non-null    int64  \n",
      " 1   Survived     891 non-null    int64  \n",
      " 2   Pclass       891 non-null    int64  \n",
      " 3   Name         891 non-null    object \n",
      " 4   Sex          891 non-null    object \n",
      " 5   Age          714 non-null    float64\n",
      " 6   SibSp        891 non-null    int64  \n",
      " 7   Parch        891 non-null    int64  \n",
      " 8   Ticket       891 non-null    object \n",
      " 9   Fare         891 non-null    float64\n",
      " 10  Cabin        204 non-null    object \n",
      " 11  Embarked     889 non-null    object \n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.7+ KB\n"
     ]
    }
   ],
   "source": [
    "cleaned_titanic_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从输出结果来看，`cleaned_titanic_train`共有891条观察值，其中`Age`、`Cabin`和`Embarked`存在缺失值，将在后续进行评估和清理。\n",
    "\n",
    "数据类型方面，`PassengerId`表示乘客ID，数据类型不应为数字，应为字符串，所以需要进行数据格式转换。\n",
    "\n",
    "并且，我们已知`Survived`（是否幸存）、`Pclass`（船舱等级）、`Sex`（性别）、`Embarked`（登船港口）都是分类数据，可以把数据类型都转换为Category。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "cleaned_titanic_train[\"PassengerId\"] = cleaned_titanic_train[\"PassengerId\"].astype(\"str\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "cleaned_titanic_train[\"Survived\"] = cleaned_titanic_train[\"Survived\"].astype(\"category\")\n",
    "cleaned_titanic_train[\"Pclass\"] = cleaned_titanic_train[\"Pclass\"].astype(\"category\")\n",
    "cleaned_titanic_train[\"Sex\"] = cleaned_titanic_train[\"Sex\"].astype(\"category\")\n",
    "cleaned_titanic_train[\"Embarked\"] = cleaned_titanic_train[\"Embarked\"].astype(\"category\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype   \n",
      "---  ------       --------------  -----   \n",
      " 0   PassengerId  891 non-null    object  \n",
      " 1   Survived     891 non-null    category\n",
      " 2   Pclass       891 non-null    category\n",
      " 3   Name         891 non-null    object  \n",
      " 4   Sex          891 non-null    category\n",
      " 5   Age          714 non-null    float64 \n",
      " 6   SibSp        891 non-null    int64   \n",
      " 7   Parch        891 non-null    int64   \n",
      " 8   Ticket       891 non-null    object  \n",
      " 9   Fare         891 non-null    float64 \n",
      " 10  Cabin        204 non-null    object  \n",
      " 11  Embarked     889 non-null    category\n",
      "dtypes: category(4), float64(2), int64(2), object(4)\n",
      "memory usage: 59.8+ KB\n"
     ]
    }
   ],
   "source": [
    "cleaned_titanic_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理缺失数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从`info`方法的输出结果来看，在`cleaned_titanic_train`中，`Age`、`Cabin`和`Embarked`变量存在缺失值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Williams, Mr. Charles Eugene</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>244373</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Masselmani, Mrs. Fatima</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2649</td>\n",
       "      <td>7.2250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>27</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Emir, Mr. Farred Chehab</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2631</td>\n",
       "      <td>7.2250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>29</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>O'Dwyer, Miss. Ellen \"Nellie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330959</td>\n",
       "      <td>7.8792</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>859</th>\n",
       "      <td>860</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Razi, Mr. Raihed</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2629</td>\n",
       "      <td>7.2292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>863</th>\n",
       "      <td>864</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Miss. Dorothy Edith \"Dolly\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.5500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>868</th>\n",
       "      <td>869</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>van Melkebeke, Mr. Philemon</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>345777</td>\n",
       "      <td>9.5000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>878</th>\n",
       "      <td>879</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Laleff, Mr. Kristo</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>349217</td>\n",
       "      <td>7.8958</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>177 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                      Name  \\\n",
       "5             6        0      3                          Moran, Mr. James   \n",
       "17           18        1      2              Williams, Mr. Charles Eugene   \n",
       "19           20        1      3                   Masselmani, Mrs. Fatima   \n",
       "26           27        0      3                   Emir, Mr. Farred Chehab   \n",
       "28           29        1      3             O'Dwyer, Miss. Ellen \"Nellie\"   \n",
       "..          ...      ...    ...                                       ...   \n",
       "859         860        0      3                          Razi, Mr. Raihed   \n",
       "863         864        0      3         Sage, Miss. Dorothy Edith \"Dolly\"   \n",
       "868         869        0      3               van Melkebeke, Mr. Philemon   \n",
       "878         879        0      3                        Laleff, Mr. Kristo   \n",
       "888         889        0      3  Johnston, Miss. Catherine Helen \"Carrie\"   \n",
       "\n",
       "        Sex  Age  SibSp  Parch      Ticket     Fare Cabin Embarked  \n",
       "5      male  NaN      0      0      330877   8.4583   NaN        Q  \n",
       "17     male  NaN      0      0      244373  13.0000   NaN        S  \n",
       "19   female  NaN      0      0        2649   7.2250   NaN        C  \n",
       "26     male  NaN      0      0        2631   7.2250   NaN        C  \n",
       "28   female  NaN      0      0      330959   7.8792   NaN        Q  \n",
       "..      ...  ...    ...    ...         ...      ...   ...      ...  \n",
       "859    male  NaN      0      0        2629   7.2292   NaN        C  \n",
       "863  female  NaN      8      2    CA. 2343  69.5500   NaN        S  \n",
       "868    male  NaN      0      0      345777   9.5000   NaN        S  \n",
       "878    male  NaN      0      0      349217   7.8958   NaN        S  \n",
       "888  female  NaN      1      2  W./C. 6607  23.4500   NaN        S  \n",
       "\n",
       "[177 rows x 12 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train[\"Age\"].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有177条观察值的年龄变量缺失，占总体数据比例20%左右。由于这些观察值数量较多，且的其它变量仍然能为分析提供价值，我们最好保留这些行。\n",
    "\n",
    "但由于我们后面需要用到的逻辑回归函数`Logit`不允许数据中包含缺失值，所以用乘客年龄平均值对缺失值进行填充。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(0)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "average_age = cleaned_titanic_train[\"Age\"].mean()\n",
    "cleaned_titanic_train[\"Age\"] = cleaned_titanic_train[\"Age\"].fillna(average_age)\n",
    "cleaned_titanic_train[\"Age\"].isna().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>884</th>\n",
       "      <td>885</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sutehall, Mr. Henry Jr</td>\n",
       "      <td>male</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>SOTON/OQ 392076</td>\n",
       "      <td>7.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>885</th>\n",
       "      <td>886</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Rice, Mrs. William (Margaret Norton)</td>\n",
       "      <td>female</td>\n",
       "      <td>39.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>382652</td>\n",
       "      <td>29.1250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>687 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                      Name  \\\n",
       "0             1        0      3                   Braund, Mr. Owen Harris   \n",
       "2             3        1      3                    Heikkinen, Miss. Laina   \n",
       "4             5        0      3                  Allen, Mr. William Henry   \n",
       "5             6        0      3                          Moran, Mr. James   \n",
       "7             8        0      3            Palsson, Master. Gosta Leonard   \n",
       "..          ...      ...    ...                                       ...   \n",
       "884         885        0      3                    Sutehall, Mr. Henry Jr   \n",
       "885         886        0      3      Rice, Mrs. William (Margaret Norton)   \n",
       "886         887        0      2                     Montvila, Rev. Juozas   \n",
       "888         889        0      3  Johnston, Miss. Catherine Helen \"Carrie\"   \n",
       "890         891        0      3                       Dooley, Mr. Patrick   \n",
       "\n",
       "        Sex        Age  SibSp  Parch            Ticket     Fare Cabin Embarked  \n",
       "0      male  22.000000      1      0         A/5 21171   7.2500   NaN        S  \n",
       "2    female  26.000000      0      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "4      male  35.000000      0      0            373450   8.0500   NaN        S  \n",
       "5      male  29.699118      0      0            330877   8.4583   NaN        Q  \n",
       "7      male   2.000000      3      1            349909  21.0750   NaN        S  \n",
       "..      ...        ...    ...    ...               ...      ...   ...      ...  \n",
       "884    male  25.000000      0      0   SOTON/OQ 392076   7.0500   NaN        S  \n",
       "885  female  39.000000      0      5            382652  29.1250   NaN        Q  \n",
       "886    male  27.000000      0      0            211536  13.0000   NaN        S  \n",
       "888  female  29.699118      1      2        W./C. 6607  23.4500   NaN        S  \n",
       "890    male  32.000000      0      0            370376   7.7500   NaN        Q  \n",
       "\n",
       "[687 rows x 12 columns]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train[\"Cabin\"].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有687条观察值的船舱号变量缺失，说明船舱号数据在大部分观察值中都是未知的，所以不能删除这些观察值。\n",
    "\n",
    "此外，我们认为船舱号并不是影响生还概率的关键因素，不会被纳入逻辑回归的自变量内，即使缺失也不会影响建立模型，因此可以保留这些观察值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>62</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Icard, Miss. Amelie</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113572</td>\n",
       "      <td>80.0</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>829</th>\n",
       "      <td>830</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Stone, Mrs. George Nelson (Martha Evelyn)</td>\n",
       "      <td>female</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113572</td>\n",
       "      <td>80.0</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                       Name  \\\n",
       "61           62        1      1                        Icard, Miss. Amelie   \n",
       "829         830        1      1  Stone, Mrs. George Nelson (Martha Evelyn)   \n",
       "\n",
       "        Sex   Age  SibSp  Parch  Ticket  Fare Cabin Embarked  \n",
       "61   female  38.0      0      0  113572  80.0   B28      NaN  \n",
       "829  female  62.0      0      0  113572  80.0   B28      NaN  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train['Embarked'].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "仅有两条观察值的登船港口变量缺失，但我们认为登船港口并不是影响生还概率的关键因素，不会被纳入逻辑回归的自变量内，即使缺失也不会影响建立模型，因此可以保留这些观察值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理重复数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据数据变量的含义以及内容来看，`PassengerId`是乘客的唯一标识符，不应该存在重复，因此查看是否存在重复值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(0)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"PassengerId\"].duplicated().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "输出结果为0，说明不存在重复值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理不一致数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不一致数据可能存在于所有分类变量中，我们要查看是否存在不同值实际指代同一目标的情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Survived\n",
       "0    549\n",
       "1    342\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Survived\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pclass\n",
       "3    491\n",
       "1    216\n",
       "2    184\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Pclass\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sex\n",
       "male      577\n",
       "female    314\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Sex\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Embarked\n",
       "S    644\n",
       "C    168\n",
       "Q     77\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Embarked\"].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从以上输出结果来看，均不存在不一致数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理无效或错误数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以通过DataFrame的`describe`方法，对数值统计信息进行快速了解。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>13.002015</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>22.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>35.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Age       SibSp       Parch        Fare\n",
       "count  891.000000  891.000000  891.000000  891.000000\n",
       "mean    29.699118    0.523008    0.381594   32.204208\n",
       "std     13.002015    1.102743    0.806057   49.693429\n",
       "min      0.420000    0.000000    0.000000    0.000000\n",
       "25%     22.000000    0.000000    0.000000    7.910400\n",
       "50%     29.699118    0.000000    0.000000   14.454200\n",
       "75%     35.000000    1.000000    0.000000   31.000000\n",
       "max     80.000000    8.000000    6.000000  512.329200"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "乘客年龄平均为30岁左右，最大值为80岁，最小值为0.42岁。同乘伴侣/同胞数量最大值为8个，最小为0个。同乘父母/孩子数量最大值为6个，最小值为0个。船票价格平均为32元，最大值为512元，最小值为0元，猜测0元表示增票。数据不存在脱离现实的数值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 整理数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对数据的整理，与分析方向紧密相关。此次数据分析目标是，根据泰坦尼克号乘客的相关信息，预测沉船事件发生后的生还概率。\n",
    "\n",
    "数据变量包含乘客同乘伴侣/同胞数量，以及同乘父母/孩子数量，这些可以帮助计算出船上家庭成员的数量。我们对同乘家庭成员数量是否会显著影响幸存感兴趣，因此可以创建一个新的变量，记录这一数值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  PassengerId Survived Pclass  \\\n",
       "0           1        0      3   \n",
       "1           2        1      1   \n",
       "2           3        1      3   \n",
       "3           4        1      1   \n",
       "4           5        0      3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  FamilyNum  \n",
       "0      0         A/5 21171   7.2500   NaN        S          1  \n",
       "1      0          PC 17599  71.2833   C85        C          1  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S          0  \n",
       "3      0            113803  53.1000  C123        S          1  \n",
       "4      0            373450   8.0500   NaN        S          0  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train['FamilyNum'] = cleaned_titanic_train['SibSp'] + cleaned_titanic_train['Parch']\n",
    "cleaned_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 探索数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在着手逻辑回归分析之前，我们可以先借助数据可视化，探索数值变量的分布，以及与乘客是否幸存存在相关性的变量，为后续的进一步分析提供方向。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置图表色盘为\"pastel\"\n",
    "sns.set_palette(\"pastel\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置图表尺寸\n",
    "plt.rcParams[\"figure.figsize\"] = [7.00, 3.50]\n",
    "plt.rcParams[\"figure.autolayout\"] = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 幸存比例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "survived_count = cleaned_titanic_train[\"Survived\"].value_counts()\n",
    "survived_index = survived_count.index\n",
    "plt.pie(survived_count, labels=survived_index, autopct='%.1f%%')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从以上饼图来看，泰坦尼克号遇难乘客多于幸存乘客，比例约为3:2。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 乘客年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAFTCAYAAADFie86AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOplJREFUeJzt3QucjeXa+PFrmDEj5xHGYCRknJOEKGIyJDUR6VUR0ZZDRjtRDhGNtItNDLXl8Ml5vxE2UyIk49jrXINSxmFQzjSO6/+57ve/1rvWmBkzY9as9az1+34+z37W8zz3rLkfe2Z1zf1c93UH2Gw2mwAAAAAWk8/THQAAAABygkAWAAAAlkQgCwAAAEsikAUAAIAlEcgCAADAkghkAQAAYEkEsgAAALAkAlkAAABYEoEsAAAALIlAFgAAAJbk0UA2Li5OGjRoIEWKFJHSpUtLTEyMJCUlubRp3ry5BAQEuGx/+9vfXNocPnxY2rZtK3fddZd5nzfffFOuX7+ex3cDAACAvBQoHrRu3Trp06ePCWY18Hz77belVatWsm/fPilUqJCjXc+ePWXUqFGOYw1Y7W7cuGGC2LCwMNm4caMcP35cXnrpJQkKCpL3338/S/24efOmHDt2zATUGigDQE7ZbDa5cOGChIeHS758/vPQi89RAB75HLV5kZMnT9q0S+vWrXOca9asme3111/P8GtWrFhhy5cvny0lJcVxLj4+3la0aFHblStXsvR9k5OTzfdlY2Njy61NP1f8CZ+jbGxs4oHPUY+OyKZ17tw5sw8NDXU5P2fOHPniiy/MqGu7du1k2LBhjlHZxMREqV27tpQpU8bRPjo6Wnr37i179+6VevXq3fJ9rly5YjbnyF8lJydL0aJF3XZ/AHzf+fPnpUKFCmZk0p/Y75fPUQB5+Tka6E2PpQYMGCBNmjSRWrVqOc7/13/9l1SsWNEML+/atUveeustk0f75ZdfmuspKSkuQayyH+u1jHJzR44cect5/fDlAxhAbvC3x+v2++VzFEBefo56TSCrubJ79uyRDRs2uJzv1auX47WOvJYtW1Zatmwpv/zyi1SuXDlH32vIkCEycODAWyJ/AAAAWIdXzETo27evLF++XL777jspX758pm0bNmxo9gcPHjR7TTc4ceKESxv7sV5LT3BwsGPUgNEDAAAAa/JoIKu5qRrELl68WNasWSOVKlW67dfs2LHD7HVkVjVu3Fh2794tJ0+edLRZtWqVCU5r1Kjhxt4DAADAkwI9nU4wd+5c+eqrr0xCrz2ntVixYlKwYEGTPqDXn3jiCSlZsqTJkY2NjZVHH31U6tSpY9pquS4NWF988UUZN26ceY+hQ4ea99aRVwAAAPgmj47IxsfHm0oFuuiBjrDatwULFpjrBQoUkG+//dYEq5GRkfLGG29Ihw4dZNmyZY73yJ8/v0lL0L2Ozr7wwgumjqxz3VkAAAD4Ho+OyNrLXmVEJ2Dpogm3o1UNVqxYkYs9AwAAuV2d6LfffjOF7vUp7D333ONXi4bAPfgJAgAfpqsfau1tnYOgKVta7eW9995zGUjQ18OHDzdPxLRNVFSUHDhwwKP9hm/Ruu4ff/yxTJ8+XRYuXGj2eqzngTvhNeW3AAC574MPPjBpXLNmzZKaNWvKtm3b5OWXXzZzEfr372/a6PyCiRMnmjYa8GrgqwvL6HLhISEhnr4FWJwGq/PmzZNq1apJp06dTK13rS6kT1z1/PPPP29+NoGcYEQWAHzYxo0b5emnn5a2bduaR7nPPvusmXewZcsWx2jshAkTzCRZbacTaWfPni3Hjh2TJUuWeLr78IF0gpUrV5ogtkuXLhIREWEmYutej/W8Xtd2QE4QyAKAD3v44Ydl9erVsn//fnO8c+dOs/BMmzZtzPGhQ4dMtRdNJ7DT0Vqt2a1LgGdEl/nWxWScNyAtzYk9c+aMNGvW7JZ8WD3W83pd2wE5QWoBLOHJp56RU3+ezrRNqZKhsnzp4jzrE2AFgwcPNkGmVn7R6i6aMztmzBgzGqbsZQ/TW+o7o2W+M1vqG3CmE7vS+/mys5+3twOyi0AWlqBB7Kh/JWTaZvgrrfOsP4BV6MSaOXPmmJrcmoeoi8oMGDBAwsPDpWvXrjl+X5b6RlZodQKlObGaTpCWfSVOezsgu0gtAAAf9uabb5pR2c6dO0vt2rXN4jG6sIyOqDov5Z3eUt8ZLfOtWOobWaF52SVKlDATu9Lmweqxntfr2g7ICQJZAPBhly9fviU3UVMM7EGFVinQgFXzaJ1HVzdv3mwWmQHuhP7saT52UlKSeTJw+PBhk1+tez3W83qderLIKVILAMCHtWvXzuTE6mNdTS34n//5H1O/s3v37uZ6QECASTUYPXq0VK1a1VF+S1MPYmJiPN19+AD9udMSW1qdYNq0aY7zOhJL6S3cKQJZAPBhkyZNMoHpa6+9JidPnjQB6quvvmoWQLAbNGiQXLp0SXr16iVnz56Vpk2bSkJCAjVkkWs0WK1evToreyHXEcgCgA/TgEHrxOqWER2VHTVqlNkAd9Gg9d577/V0N+Bj+FMIAAAAlkQgCwAAAEsikAUAAIAlEcgCAADAkghkAQAAYEkEsgAAALAkAlkAAABYEnVkAQCA2+myyCyIgNxGIAsAANxq7969ZonaM2fOuCxR26ZNG5aoxR0hkAUAAG4NYufNmyfVqlWTTp06SZkyZeTEiROybt06c/75558nmEWOMaYPAADclk6gI7EaxHbp0kUiIiIkODjY7PVYz+t1bQfkBIEsAABwC82J1XSCZs2a3ZIPq8d6Xq9rOyAnCGQBAIBb6MQupekE6bGft7cDsotAFgAAuIVWJ1CaE5se+3l7OyC7CGQBAIBbaIktrU6gE7vS5sHqsZ7X69oOyAkCWQAA4BaaB6sltpKSkmTOnDly+PBhuXLlitnrsZ7X69STRU5RfgsAALiNltbSElsrVqyQadOmOc7rSCylt3Cn+BMIAAC4VXJyspw7d87l3NmzZ8154E4QyAIAALdJSEiQ77//Pt1rel6vAzlFagEAAHCL69evy4YNG8zrypUrS6lSpcy5wMBAOXXqlBw8eNBcj4qKMueA7GJEFgB8nM4IDwgIuGXr06ePuZ6ammpelyxZUgoXLiwdOnTIsFwSkB2JiYlis9nkrrvukl9//dUcb9261ez1WM/rdT0GcoJAFgB8nAYOx48fd2yrVq0y5zt27Gj2sbGxsmzZMlm0aJEph3Ts2DFp3769h3sNX/D777+b/eXLl03QGhMTI4MHDzZ7Pdbzzu2A7GIcHwB8nD7OdTZ27FjzmFeXB9UJONOnT5e5c+dKixYtzPUZM2ZI9erVZdOmTdKoUSMP9Rq+wJ4uUKBAAXnzzTcdxw0aNJB69erJmDFj5OrVq6QVIMcYkQUAP6JBwxdffCHdu3c36QXbt2+Xa9eumRxFu8jISImIiMj0ca/WAj1//rzLBqQVEhJi9po+kB77Ign2dkB2EcgCgB9ZsmSJKXvUrVs3c5ySkmJGy4oXL+7SrkyZMuZaRuLi4qRYsWKOrUKFCm7vO6zHvtCB/rE0btw42bJli/mjR/d6rBO/nNsB2cVYPgD4EU0j0JWUwsPD7+h9hgwZIgMHDnQca3BCMIu0dAKh3aVLl+Srr74yW2btgOzgTyAA8BM6oebbb7+VV155xXEuLCzMpBvoKK0zrVqg1zISHBwsRYsWddmAtBo2bGhGWzV1oEiRIi7X9GdGz+t1bQfkBIEsAPgJncRVunRpadu2reNc/fr1JSgoSFavXu04l5SUJIcPH5bGjRt7qKfwFTqJq0mTJqbEm+bD6usnn3zS7G/cuGHO62smeyGn+MkBAD+gQYQGsl27dnUJGjS/tUePHiZNIDQ01IyS9evXzwSxVCxAbmjdurXZ//DDD2az05HYRx55xHEdyAkCWQDwA5pSoKOsWq0grfHjx5ugQhdC0GoE0dHRMmXKFI/0E75Jg1WtjLF582Y5ffq0+aNJ0wkYicWd4icIAPxAq1atMiyBpHmKkydPNhvg7jQDIDcRyAIAgDxJb/ntt9/kwoULZuKXLp1M2S3cKY/+BGkdQl3dQ3+gdQKCLlmnkwycZWUNcH1cppMXdLk7fR9dPcRemw4AAHjW3r175eOPPzbl3xYuXGj2eqznAcsGsrqmtwapugyirv2tBZP18ZfWmrO73RrgOutRg1gtH7Nx40aZNWuWzJw5U4YPH+6huwIAAHYarM6bN88ssvHqq6+a/z7rXo/1PMEsLJtakJCQ4HKsAaiOqOqSiY8++miW1gD/5ptvZN++fWYig/5S3H///fLee+/JW2+9Je+++65ZsQYAAHgmnWDlypVSrVo16dKliyOVQJdA1uM5c+aY6/rfddIMkBNe9VOjgavS2YwqK2uA67527domiLXTGbe6ykxGf+WxRjgAAO6nObFnzpyRZs2amZS/pUuXmgEp3euxntfr2g6w9GQv/attwIABZkZjrVq1srwGuO6dg1j7dfu1jHJzR44c6aY7AQAASid2qe+++07279/vOH/w4EFTiuu+++5zaQdYdkRWc2X37Nkj8+fPd/v30jXCdfTXviUnJ7v9ewIA4G/sy9JqEJs/f36TNqiLb+hej+3BbdrlawFLBbJ9+/aV5cuXm7/Yypcvn601wHWftoqB/TijdcJZIxwAAPcLDw93vNa5K1p9SCdm616P02sHWCaQ1eLcGsQuXrxY1qxZI5UqVXK5npU1wHW/e/duOXnypKONVkDQ4LRGjRp5eDcAAMCZTsi2e//992XFihVmsrbu9Ti9doBlcmQ1nUArEnz11VfmsYI9p1XX/i5YsGCW1gDXcl0asL744osybtw48x5Dhw41760jrwAAwDP+/PNPx+uAgACX1eWcj53bAZYZkY2Pjzc5qs2bN5eyZcs6tgULFrisAf7kk0+ahRA0p0bTBb788kvHdc2x0bQE3WuA+8ILL8hLL70ko0aN8tBdAQAAVaJECbPXp6vvvPOONGzYUKpUqWL2eqznndsBlhqRzWjd7+yuAV6xYkXzmAIAAHgPe4CqpTTHjBnj+O++Vi3YsmWL45hAFpae7AUAAHyPc512DVqrVq0qPXv2NHvnwSzqucPydWQBAIBv0bkuzvmwBw4cMJud/by9HZBdjMgCAACPpBJmJcUQyAyBLAAAcOvS83ZaK75bt24uNePTawdkFakFAADALdIuOHTkyBGZOXPmbdsBWcWILAAAcIvff/89V9sBaRHIAgAAt0i7xLzWkNWqBbrPrB2QVaQWAAAAt9BqBCdOnHAca/1Y3dJrB+QEI7IAAMAtdPn53GwHpEUgCwA+7ujRo2b57pIlS0rBggWldu3asm3bNpcSSMOHDzdLhOv1qKgol1qfQE6lrUZQvHhx6dSpk9ln1g7IKgJZAPBhZ86ckSZNmpg17VeuXCn79u2Tjz76yGVJ0HHjxsnEiRNl6tSpsnnzZilUqJBER0dLamqqR/sO60ubMqC5sAsXLrwlJ5bUAuQUObIA4MM++OADqVChgsyYMcNxrlKlSi6jsRMmTJChQ4fK008/bc7Nnj1bypQpI0uWLJHOnTun+75Xrlwxmx1LjCI9Fy5cyNV2QFqMyAKAD1u6dKk8+OCD0rFjRyldurTUq1dPPvvsM8f1Q4cOSUpKikkncB4da9iwoSQmJmb4vnFxcaadfdNgGUgrbcpARlULSC1AThHIAoAP+/XXXyU+Pl6qVq0qX3/9tfTu3Vv69+8vs2bNMtc1iFU6AutMj+3X0jNkyBATfNi35ORkN98JrChtLqxWLNA/pNJWLkjbDsgqUgsAwIfdvHnTjMi+//775lhHZPfs2WPyYbt27Zrj9w0ODjYbkJmKFStKUlJSltoBOcGILAD4MK1EUKNGDZdz1atXl8OHD5vXYWFhZu9c69N+bL8G5FTa3OnChQvLM888Y/aZtQOyikAWAHyYVixIOyK2f/9+xwiYTvzSgHX16tUuQYVWL2jcuHGe9xe+JW3AevHiRVm8eLHZZ9YOyCoCWQDwYbGxsbJp0yaTWqB5iXPnzpVPP/1U+vTpY64HBATIgAEDZPTo0WZi2O7du+Wll16S8PBwiYmJ8XT3YXHOf0Tpz5oz5+OspB8A6SFHFgB8WIMGDcwImE7OGjVqlBmB1XJbXbp0cbQZNGiQXLp0SXr16mXqezZt2lQSEhIkJCTEo32H9TlXI9BSb3Xr1jU/Xxs2bJCdO3em2w7IDgJZAPBxTz75pNkyoiNjGuTqBuSmokWLmlQV/RnTQFaDV+cA1n5e2wE5QWoBAABwi8jISLPXYDU99vP2dkB2EcgCAAC3SDupS9NVtBxc2rSVtO2ArCK1AAAAuEWRIkVcjlNTU2Xbtm23bQdkFSOyAADALez1itU999xjymwFBQWZvR6n1w7IDkZkAQCAW5w5c8bx+rfffnO8vnbtmks6gXM7IDsYkQUAAG6R1RJulHpDTjEiCwAA3OKBBx5wpA0MHjxYdu3aJadPn5bQ0FCpU6eOjB071tEOyAlGZAEAgFscP37c8VqD1qNHj5qgVff2IDZtOyA7GJEFAABuYa8TW6BAAbl69eotCyLYz2dUZxa4HQJZAADgFnfffbfZa7BapUoVM8nrr7/+koIFC5rqBQcPHnRpB2QXgSwAAF5Eg75Tp055uhu5onz58mYZWg1aU1JSXCoVaAkuHZHV4FbbabqBLyhVqpS5L+QNAlkAALyIBrFTpkwRXwvOdXPmHNR++umn4itee+01KVeunKe74TcIZAEA8LIRPQ2GfMnGjRtNbqxzLqyO1NatW1cefvhh8bX//5B3CGQBAPAi+lja10b0OnbsKM8884x888038sMPP0iTJk2kVatWEhhIGII7Q/ktAADgdhq06gis0j1BLHIDgSwAAAAsiUAWAAAAlkQgCwAAAEsikAUAAIAlEcgCAADAkghkAcDHvfvuu6Zmp/MWGRnpuJ6amip9+vSRkiVLmtWWOnToICdOnPBonwEgKwhkAcAP1KxZU44fP+7YNmzY4LgWGxsry5Ytk0WLFsm6devk2LFj0r59e4/2FwCygiJuAOAHtGZnWFjYLefPnTsn06dPl7lz50qLFi3MuRkzZkj16tVl06ZN0qhRo3Tf78qVK2azO3/+vBt7DwBeOCK7fv16adeunYSHh5tHXUuWLHG53q1bt1seh7Vu3dqlzenTp6VLly5StGhRKV68uPTo0cNl/WYAgMiBAwfMZ+29995rPjMPHz5szm/fvl2uXbsmUVFRjraadhARESGJiYkZvl9cXJwUK1bMsVWoUCFP7gMAvCaQvXTpklndY/LkyRm20cDV+XHYvHnzXK7rB/LevXtl1apVsnz5chMc9+rVKw96DwDW0LBhQ5k5c6YkJCRIfHy8HDp0SB555BG5cOGCpKSkmCVRdSDAWZkyZcy1jAwZMsSM5tq35OTkPLgTAPCi1II2bdqYLTPBwcHpPg5TP/30k/lg3rp1qzz44IPm3KRJk+SJJ56Qf/zjH2b0AQD8nfPnbJ06dUxgW7FiRVm4cKEULFgwR++pn826AYAnef1kr7Vr10rp0qWlWrVq0rt3b/nzzz8d1/Sxl44i2INYpY/H8uXLJ5s3b87wPTWvS/O5nDcA8Bf6uXnffffJwYMHzUDB1atX5ezZsy5ttGpBRoMIAOAtvDqQ1bSC2bNny+rVq+WDDz4ws2l1ZOHGjRvmuj720iA37YSG0NDQTB+JkdsFwJ/pPIJffvlFypYtK/Xr15egoCDzOWuXlJRkcmgbN27s0X4CgKWrFnTu3Nnxunbt2uaRWOXKlc0obcuWLXP8vprbNXDgQMexjsgSzALwVX//+9/NxFpNJ9DSWiNGjJD8+fPL888/b/6Y10my+pmogwA6cbZfv34miM2oYgEAeAuvDmTT0tm2d999t3kcpoGsPvY6efKkS5vr16+bSgaZPRIjtwuAPzly5IgJWjU1q1SpUtK0aVNTWktfq/Hjx5uULF0IQVOvoqOjZcqUKZ7uNgD4ViCrH8b6QayPw5SOGGhel5aP0cdjas2aNXLz5k0zmQEAIDJ//vxMr4eEhJjqMZlVkAEAbxTo6TwtHV2105IwO3bsMI+3dBs5cqQZIdDRVc3nGjRokFSpUsWMFigt2K15tD179pSpU6eaWoh9+/Y1KQlULAAAAPBtHp3stW3bNqlXr57ZlOZo6evhw4eb/K1du3bJU089ZWbXag6Xjrp+//33LmkBc+bMMcW7NdVAy27pI7NPP/3Ug3cFAAAAnx+Rbd68udhstgyvf/3117d9Dx251aUVAQAA4F+8uvwWAAAAkBECWQAAAPhPIKtlsJxX2LLTCgJ6DQAAAPDKQPa3335zrK7lTOsPHj16NDf6BQAAAOTeZK+lS5e6TMTSFWHsNLDVJQ7vueee7LwlAAAA4P5ANiYmxuwDAgKka9euLtd0rW4NYj/66KOc9QQAAABwVyCrK2apSpUqydatW81ysQAAAIBl6sjqClwAAACAJRdE0HxY3U6ePOkYqbX7/PPPc6NvAAAAQO5WLRg5cqS0atXKBLJ//PGHnDlzxmUDAOSOq1evSlJSkly/ft3TXQEA3xiRnTp1qsycOVNefPHF3O8RAEAuX74s/fr1k1mzZpnj/fv3mzrdeq5cuXIyePBgT3cRAKw5IqsjBA8//HDu9wYAYAwZMkR27twpa9eulZCQEMf5qKgoWbBggUf7BgCWDmRfeeUVmTt3bu73BgBgLFmyRD755BNp2rSpKXloV7NmTfnll1882jcAsHRqQWpqqnz66afy7bffSp06dUwNWWcff/xxbvUPAPzSqVOnpHTp0recv3TpkktgCwD+LEeB7K5du+T+++83r/fs2eNyjQ9YALhzDz74oPznP/8xObHOn63/+te/pHHjxh7uHQBYOJD97rvvcr8nAACH999/X9q0aSP79u0zFQv++c9/mtcbN26UdevWebp7AGDdHFkAgHtpbuyOHTtMEFu7dm355ptvTKpBYmKi1K9f39PdAwDrjsg+9thjmaYQrFmz5k76BAAQkcqVK8tnn32Wq+85duxYUxHh9ddflwkTJjjmPbzxxhsyf/58uXLlikRHR8uUKVOkTJkyufq9AcArAll7fqzdtWvXzMiB5st27do1t/oGAH7r/Pnz6Z7XQYTg4GApUKBAtt9z69atMm3aNDNJ11lsbKzJx120aJEUK1ZM+vbtK+3bt5cffvghx/0HAK8NZMePH5/u+XfffVcuXrx4p30CAL9XvHjxTJ98lS9fXrp16yYjRoyQfPlunyWmn81dunQxI7yjR492nD937pxMnz7dlFRs0aKFOTdjxgypXr26bNq0SRo1apTu++nIrW63C7wBwDI5si+88IJ8/vnnufmWAOCXdPXE8PBwefvtt01NWd30ta7qFR8fL7169ZKJEyeaVIGs6NOnj7Rt29YsqOBs+/bt5qma8/nIyEiJiIgw+bgZiYuLM6O39q1ChQp3cLcAkIcjshnRDz3nFWgAADmjS9N+9NFH0qlTJ8e5du3amYlfmh6wevVqE2yOGTPGBLiZ0dzXH3/80aQWpJWSkmLSFHQE2Jnmx+q1jGie7cCBA11GZAlmAVgikNXcKWc2m02OHz8u27Ztk2HDhuVW3wDAb2mZralTp95yvl69eo6RUq1scPjw4UzfJzk52UzsWrVqVa4ONGierm4AYLnUAufHSbqFhoZK8+bNZcWKFSZfCwBwZ3R0U3NX09Jz9pHPP//8U0qUKJHp+2jqwMmTJ+WBBx6QwMBAs2kdWk1L0Nc68nr16lU5e/asy9edOHFCwsLCcvmuAMALRmR1IgAAwH3+8Y9/SMeOHWXlypXSoEEDc06fev3000/y3//93+ZYUwWee+65TN+nZcuWsnv3bpdzL7/8ssmDfeutt0xQrMuMa6pChw4dzPWkpCQz0ssKYgB8OkdW/9LXD1VVs2ZN88gLAHDnnnrqKRNQanrB/v37zTld6Usnfdmrw/Tu3fu271OkSBGpVauWy7lChQpJyZIlHed79Ohh8l316VrRokXNsrgaxGZUsQAALB3I6mOqzp07y9q1ax0TBPSxlC6UoJMKSpUqldv9BAC/c8899ziqEuhkqnnz5pkRWB2ZvXHjRq59Hy2pqCW8dETWeUEEAPDJHFn9a/3ChQuyd+9eOX36tNl0MQT9oO3fv3/u9xIA/NT69evNQjNaikurGOiAgdZ3vRM6CGFf1UvpJLDJkyebz/JLly7Jl19+SX4sAN8dkU1ISJBvv/3WFMy2q1GjhvkgbNWqVW72DwD8jpa90jqyOrFLBwi0BJeOlGpagX7WAgDuYET25s2bZnJAWnpOrwEAckZrxVarVk127dplRk2PHTsmkyZN8nS3AMB3AlldxlDrEuoHrN3Ro0fNet06QxYAkDNapUAnX40cOdKsxJU/f35PdwkAfCuQ/eSTT8zjLp2IULlyZbNVqlTJnGPkAABybsOGDWYOQv369aVhw4bm8/aPP/7wdLcAwHdyZLXuoC53qHmyP//8szmn+bJp1/AGAGSPlrzSTdMKFixYIJ9//rkpjaVpW7o6l37+akktAEA2R2TXrFljJhroyGtAQIA8/vjjpoKBblqwW2vJfv/99+7rLQD4Ca312r17dzNCqwsavPHGG6YUV+nSpU2NWQBANgNZHSHo2bOnKZidli5V++qrr8rHH3+cm/0DAL+nk7/GjRsnR44cMbVkAQA5SC3YuXOnfPDBBxle19JbuqwiACD36cSvmJgYs/k7XYRHa97CWk6dOuWyh7WeEhX//4tgWTaQPXHiRLpltxxvFhjIDycAwO1B7PgJE+T6tWue7gpyaNGiRZ7uArIpMChIYgcM8LpgNluBbLly5cwKXlWqVEn3utY9LFu2bG71DQCAW+hIrAaxFR9oLSFFQj3dHcDnpV44Lb//mGB+9ywdyD7xxBMybNgwad26tVnS0Nlff/0lI0aMkCeffDK3+wgAwC00iL2reGlPdwOAVQLZoUOHmjW477vvPunbt6+ZgKC0BJcuT3vjxg1555133NVXAAAAIGeBbJkyZWTjxo3Su3dvGTJkiNhsNnNeS3FFR0ebYFbbAAAAAF63IELFihVlxYoVcubMGTl48KAJZqtWrSolSpRwTw8BAACA3FrZS2ngqosgAAAAAF6/IAIAAADgLTwayK5fv17atWsn4eHhJs92yZIlLtc1bWH48OGmpFfBggUlKipKDhw44NLm9OnT0qVLF7PamJaE6NGjh1y8eDGP7wQAAAB+FchqPbK6deuaSWLp0SUZJ06cKFOnTpXNmzebVSV0UllqaqqjjQaxe/fulVWrVsny5ctNcNyrV688vAsAAABYKkc2N7Rp08Zs6dHR2AkTJpiSX08//bQ5N3v2bFMVQUduO3fuLD/99JMkJCTI1q1b5cEHHzRtJk2aZOrd6lK5OtKbnitXrpjN7vz58265PwAAAPhhjuyhQ4ckJSXFpBPYFStWTBo2bCiJiYnmWPeaTmAPYpW2z5cvnxnBzUhcXJx5L/tWoUIFN98NAAAA/CaQ1SBWpa1Lq8f2a7ovXdp1VZfAwEAJDQ11tEmP1sA9d+6cY0tOTnbLPQCAN4iPj5c6deqYuQS6NW7cWFauXOm4rulaffr0kZIlS0rhwoWlQ4cOcuLECY/2GQAsHci6U3BwsOMD3b4BgK8qX768jB07VrZv3y7btm2TFi1amJQtnV+gYmNjZdmyZbJo0SJZt26dHDt2TNq3b+/pbgOAd+fIZiYsLMzsdVRAqxbY6fH999/vaHPy5EmXr7t+/bqpZGD/egDwd1odxtmYMWPMKO2mTZtMkDt9+nSZO3euCXDVjBkzpHr16uZ6o0aN0n1P5hoA8AZeG8hWqlTJBKOrV692BK76Qam5r7pErtLHY2fPnjWjDPXr1zfn1qxZIzdv3jS5tAAAVzdu3DAjr1o1Rj9D9fPz2rVrLvMRIiMjJSIiwsxDyCiQ1bkGI0eOFE9KvXDao98f8BepXvy75tFAVuu96jK3zhO8duzYYXJc9UN0wIABMnr0aLMErga2w4YNM5UIYmJiTHsdMWjdurX07NnTlOjSD+O+ffuaigYZVSwAAH+0e/duE7hqPqzmwS5evFhq1KhhPnMLFChgJs5mNB8ho7kGAwcOdBzrQENeT5z9/ceEPP1+ALyPRwNZzdV67LHHHMf2D8WuXbvKzJkzZdCgQWbUQOvC6shr06ZNTbmtkJAQx9fMmTPHBK8tW7Y01Qp0koLWngUA/J9q1aqZoFUnuP773/82n7OaD3sncw1086SKD7SWkCKhHu0D4C8jsr976R+OHg1kmzdvburFZkRX+xo1apTZMqKjt5rbBQDImI66VqlSxbzWVCytv/3Pf/5TnnvuObl69aoZLHAeldX5CN4+10CD2LuKu1auAeBf/LJqAQD4O51LoJO1NKgNCgoy8xHskpKS5PDhwyYVAQC8mddO9gIA5A7NZ9VVFHXuwYULF8xTrLVr18rXX39tFoXp0aOHSe3SJ1xajrBfv34miM1oohcAeAsCWQDwcVqm8KWXXpLjx4+bwFUXR9Ag9vHHHzfXx48f75hjoKO00dHRMmXKFE93GwBui0AWAHyc1onNjE6gnTx5stkAwErIkQUAAIAlEcgCAADAkghkAQAAYEkEsgAAALAkAlkAAABYEoEsAAAALIlAFgAAAJZEIAsAAABLIpAFAACAJRHIAgAAwJIIZAEAAGBJBLIAAACwJAJZAAAAWBKBLAAAACyJQBYAAACWRCALAAAASwr0dAcAAMiJ1AunPd0FwC+kevHvGoEsAMBSChUqJIFBQfL7jwme7grgNwKDgszvnrchkMUde/KpZ+TUn5n/tVaqZKgsX7o4z/oEwHcVL15cYgcMkEuXLnm6K8imU6dOyaJFi6Rjx45SqlQpT3cH2aBBrP7ueRsCWdwxDWJH/SvzkZHhr7TOs/4A8H36H1Rv/I8qskaD2HLlynm6G/ABTPYCAB8XFxcnDRo0kCJFikjp0qUlJiZGkpKSXNqkpqZKnz59pGTJklK4cGHp0KGDnDhxwmN9BoCsIJAFAB+3bt06E6Ru2rRJVq1aJdeuXZNWrVq5PJqPjY2VZcuWmce+2v7YsWPSvn17j/YbAG6H1AIA8HEJCa6pPzNnzjQjs9u3b5dHH31Uzp07J9OnT5e5c+dKixYtTJsZM2ZI9erVTfDbqFGjW97zypUrZrM7f/58HtwJALhiRBYA/IwGrio0NNTsNaDVUdqoqChHm8jISImIiJDExMQM0xWKFSvm2CpUqJBHvQeA/0MgCwB+5ObNmzJgwABp0qSJ1KpVy5xLSUmRAgUK3DJ5qkyZMuZaeoYMGWICYvuWnJycJ/0HAGekFgCAH9Fc2T179siGDRvu6H2Cg4PNBgCeRCCLO64Te+TIUUt8D8Df9e3bV5YvXy7r16+X8uXLO86HhYXJ1atX5ezZsy6jslq1QK8BgLcikMUd14nt+ngNS3wPwF/ZbDbp16+fLF68WNauXSuVKlVyuV6/fn0JCgqS1atXm7JbSstzHT58WBo3buyhXgPA7RHIAoAfpBNoRYKvvvrK1JK1573qJK2CBQuafY8ePWTgwIFmAljRokVN4KtBbHoVCwDAWxDIAoCPi4+PN/vmzZu7nNcSW926dTOvx48fL/ny5TMjslpWKzo6WqZMmeKR/gJAVhHIAoAfpBbcTkhIiEyePNlsAGAVlN8CAACAJRHIAgAAwJIIZAEAAGBJBLIAAACwJAJZAAAAWBKBLAAAACyJQBYAAACWRCALAAAAS/LqQPbdd9+VgIAAly0yMtJxPTU11Sy9WLJkSSlcuLBZkebEiRMe7TMAAADyhlcHsqpmzZpy/Phxx7ZhwwbHtdjYWFm2bJksWrRI1q1bJ8eOHZP27dt7tL8AAADIG16/RG1gYKCEhYXdcv7cuXMyffp0mTt3rrRo0cKxbnj16tVl06ZN0qhRowzfU9cR183u/Pnzbuo9AAAA/HZE9sCBAxIeHi733nuvdOnSRQ4fPmzOb9++Xa5duyZRUVGOtpp2EBERIYmJiZm+Z1xcnBQrVsyxVahQwe33AQAAAD8KZBs2bCgzZ86UhIQEiY+Pl0OHDskjjzwiFy5ckJSUFClQoIAUL17c5WvKlCljrmVmyJAhZkTXviUnJ7v5TgAAAOBXqQVt2rRxvK5Tp44JbCtWrCgLFy6UggUL5vh9g4ODzQYAAADr8uoR2bR09PW+++6TgwcPmrzZq1evytmzZ13aaNWC9HJqAQAA4Fu8ekQ2rYsXL8ovv/wiL774otSvX1+CgoJk9erVpuyWSkpKMjm0jRs39nRX4YWefOoZOfXn6QyvlyoZKsuXLs7TPgEAAB8NZP/+979Lu3btTDqBltYaMWKE5M+fX55//nkzSatHjx4ycOBACQ0NlaJFi0q/fv1MEJtZxQL4Lw1iR/0rIcPrw19pnaf9AQAAPhzIHjlyxAStf/75p5QqVUqaNm1qSmvpazV+/HjJly+fGZHVclrR0dEyZcoUT3cbAAAA/h7Izp8/P9PrISEhMnnyZLMBAADAv1hqshcAAABgiRFZ+I7ff/tNGjZpluH1I0eO5ml/AH+yfv16+fDDD81CMrrU9+LFiyUmJsZx3WazmTkIn332makE06RJE1O7u2rVqh7tNwDcDoEs8kZAvkwnWnV9vEaedgfwJ5cuXZK6detK9+7dpX379rdcHzdunEycOFFmzZollSpVkmHDhpk5B/v27TMpXADgrQhkAcDH6eIyzgvMONPR2AkTJsjQoUPl6aefNudmz55tVklcsmSJdO7cOY97CwBZRyDr525XW1Xx2B/wXbr0ty7rHRUV5Tin5Q11JcXExMQMA1mtFKOb3fnz5/OkvwDgjEDWz92utqo/Pfa/XR6vYtEE+BoNYpWOwDrTY/u19MTFxcnIkSPd3j8AyAyBLJDFPF7FognA/xoyZIhZkMZ5RLZChQoe7RMA/0P5LQDwY2FhYWZ/4sQJl/N6bL+WnuDgYLOiovMGAHmNQBYA/JhWKdCAdfXq1S6jq5s3bzZLfgOANyO1AAB83MWLF+XgwYMuE7x27NghoaGhEhERIQMGDJDRo0eburH28lvh4eEutWYBwBsRyAKAj9u2bZs89thjjmN7bmvXrl1l5syZMmjQIFNrtlevXmZBhKZNm0pCQgI1ZAF4PQJZ+AxWDwPS17x5c1MvNiMBAQEyatQoswGAlRDIwnewehgAAH6FyV4AAACwJEZk3bgiFsXzAQAA3IdA1o0rYnlD8fzbBdzkjQIAAKsikPXzgJu80dzFSD0AAHmHQBbww5F6AAB8AZO9AAAAYEkEsgAAALAkAlkAAABYEoEsAAAALIlAFgAAAJZEIAsAAABLovwWkA2///abNGzS7I4WmLjde1BnFoAv+uOPP2TatGnmte779+8vd999t6e7BYsjkAWyIyDfnS8wcZv3oM4s4N+uXr0qp06dEl8SHx8vNpvNcXzjxg0ZP368BAQESO/evcWXlCpVSgoUKODpbvgNAlkAALyIBrFTpkwRf6DBra/d62uvvSblypXzdDf8BoEsAABeNqKnwZCvpBMsXLjQvO7WrZvcddddjmuXL1+WmTNnmtedOnXymTQD/f8PeYdAFgAAL6KPpX1lRO+zzz4z+4IFC0qRIkVk8uTJcvPmTcmXL5/06dNHQkJCJDU1VRYvXizvvvuup7sLCyKQBbwMk8EA+Ipr166Z/V9//SWTJk1ynNdg1vnY3g7ILgJZwNvkwmSwJ596Rk79eTrD6wTDAPJCUFBQloJUbQfkBIEs4IM0iKUyAgBPe/bZZ2XevHnmdXBwsLRp00YiIyPl559/lpUrV8qVK1cc7YCcIJD14kfEtxtVy8p7wP9+rrJazxZIS/MXP/zwQ0lJSZG6deuaR78PPfSQp7sFC5s/f77jtQatCQkJprzYmjVrHEGsvd3o0aM91EtYGYGsFz8ivt2oWlbeA/73c5XleraAkwULFsjAgQNl6tSp0rBhQ5kwYYJER0dLUlKSlC5d2tPdg0U5145VOrFrxYoVt20HZBVL1AIA5OOPP5aePXvKyy+/LDVq1DABrZZK+vzzzz3dNfiA/PnzS2xsrCMXVvd6rOeBO8GILAD4OX3Uu337dhkyZIjjnJZHioqKksTExHS/Rh8LOz8aPn/+fJ70FdbStGlT2bBhg1nJS4NX5xJb586dM+ft7YCcIJD14lxH8hwB5FXReg0oypQp43Jej3VSTnri4uJk5MiRedRDWNXjjz9uAlk1btw4CQwMlEcffVTWr18v169fd2kH5ASBrBfnOpLnCE9hoiFuR0dvNafWeUS2QoUKHu0TvI8Gro888oh8//335liDV53o5UyvazsgJ/jJAZCjiYZdoyJZuMFH6NKgmqt44sQJl/N6HBYWlu7XaCkl3YDbad36fycl24PZtEGs/TqQEwSygB/KlbSWXFi4Ad6zJGr9+vVl9erVEhMT41h5SY/79u3r6e7BB2iwqjnXmzdvltOnT0toaKipjsFILO4UP0GAPyKtBWlomkDXrl3lwQcfNLVjtfzWpUuXTBUDIDdo0NqkSRNPdwM+hkAWgNdiqd2889xzz8mpU6dk+PDhZkGE+++/3xSvTzsBDAC8CYEsAK9c2U6x1G7e0jQCUgkAWInPBLL+urQiJbzgtcihBQC4mU8Esn69tCK5jgAAwE/5xBK1LK0IAADgfyw/IpsbSyvqMnnZXWLxxvXrculi5u21fE1mbe70ulW+h1X6yb9F3n4P/R263e/c7X7PDv36qzzYMPNZ0CVDS8iiBXMzvN7xuf+SP0+fyfHXp2W/J5vNJv7Efr8sVQvgTmXrc9RmcUePHtW7tG3cuNHl/Jtvvml76KGH0v2aESNGmK9hY2Njc9eWnJxs8yd6v57+N2djYxO/+xy1/IhsbiytqCNHWqC5ZMmSEhAQkOnX2pdhTE5OlqJFi4o/4d65d+799nQE4cKFCxIeHi7+RO9X/52KFCly289R+C9//jxB1mXnc9TygWxuLa1YvHjxbH1f/QX0119C7p179zfZvfdixYqJv9GUrvLly3u6G7AIf/48Qe5+jubzpaUV7exLKzZu3NijfQMAAID7WH5EVrG0IgAAgP/xiUA2L5dW1JSEESNG3JKa4A+4d+7d3/jzvQPuwO8UcluAzvjK9XcFAAAA3MzyObIAAADwTwSyAAAAsCQCWQAAAFgSgSwAAAAsiUA2GyZPniz33HOPhISESMOGDWXLli3ia+Li4qRBgwZmdZ7SpUtLTEyMJCUlubRJTU2VPn36mJXQChcuLB06dLhlQQpfMHbsWLNC0YABA/zi3o8ePSovvPCCubeCBQtK7dq1Zdu2bY7rOi9UK4OULVvWXI+KipIDBw6IL7hx44YMGzZMKlWqZO6tcuXK8t5777ms8+3L9w8AVkUgm0ULFiww9Wq1bMiPP/4odevWlejoaDl58qT4knXr1plAbdOmTbJq1Sq5du2atGrVytTltYuNjZVly5bJokWLTPtjx45J+/btxZds3bpVpk2bJnXq1HE576v3fubMGWnSpIkEBQXJypUrZd++ffLRRx9JiRIlHG3GjRsnEydOlKlTp8rmzZulUKFC5ndAg3ur++CDDyQ+Pl4++eQT+emnn8yx3u+kSZP84v4BwLK0/BZu76GHHrL16dPHcXzjxg1beHi4LS4uzubLTp48qUNStnXr1pnjs2fP2oKCgmyLFi1ytPnpp59Mm8TERJsvuHDhgq1q1aq2VatW2Zo1a2Z7/fXXff7e33rrLVvTpk0zvH7z5k1bWFiY7cMPP3Sc03+P4OBg27x582xW17ZtW1v37t1dzrVv397WpUsXv7h/ALAqRmSz4OrVq7J9+3bzKNF5XXE9TkxMFF927tw5sw8NDTV7/XfQUVrnf4vIyEiJiIjwmX8LHZFu27atyz36+r0vXbrUrIzXsWNHk1JSr149+eyzzxzXDx06ZBYbcb53XQdbU2ysfu/q4YcfNsta79+/3xzv3LlTNmzYIG3atPGL+wcAq/KJlb3c7Y8//jA5dGlXCtPjn3/+WXzVzZs3TX6oPnKuVauWOaf/MS9QoIAUL178ln8LvWZ18+fPN6kjmlqQli/f+6+//moerWv6zNtvv23uv3///uZ+dfln+/2l9ztg9XtXgwcPlvPnz5s/TPLnz29+38eMGSNdunQx1339/gHAqghkkenI5J49e8zIlD9ITk6W119/3eQG64Q+f6J/tOiI7Pvvv2+OdURW/7/XfFANZH3dwoULZc6cOTJ37lypWbOm7Nixw/wRFx4e7hf3DwBWRWpBFtx9991mlCbt7HQ9DgsLE1/Ut29fWb58uXz33XdSvnx5x3m9X021OHv2rM/9W2jqgE7ee+CBByQwMNBsOqFLJ/joax1989V715n4NWrUcDlXvXp1OXz4sHltvz9f/R148803zahs586dTbWGF1980Uzs0yoe/nD/AGBVBLJZoI9X69evb3LonEew9Lhx48biS7TEkAaxixcvljVr1phyRM7030Fntjv/W2h5Lg14rP5v0bJlS9m9e7cZjbNvOkqpj5ftr3313jV9JG2ZNc0XrVixonmtPwcasDnfuz6K19n7Vr93dfnyZZP37kz/eNXfc3+4fwCwLE/PNrOK+fPnmxnKM2fOtO3bt8/Wq1cvW/HixW0pKSk2X9K7d29bsWLFbGvXrrUdP37csV2+fNnR5m9/+5stIiLCtmbNGtu2bdtsjRs3Npsvcq5a4Mv3vmXLFltgYKBtzJgxtgMHDtjmzJlju+uuu2xffPGFo83YsWPNz/xXX31l27Vrl+3pp5+2VapUyfbXX3/ZrK5r1662cuXK2ZYvX247dOiQ7csvv7TdfffdtkGDBvnF/QOAVRHIZsOkSZNMEFOgQAFTjmvTpk02X6N/26S3zZgxw9FG/8P92muv2UqUKGGCnWeeecYEu/4QyPryvS9btsxWq1Yt8wdbZGSk7dNPP3W5riWohg0bZitTpoxp07JlS1tSUpLNF5w/f978/6y/3yEhIbZ7773X9s4779iuXLniF/cPAFYVoP/j6VFhAAAAILvIkQUAAIAlEcgCAADAkghkAQAAYEkEsgAAALAkAlkAAABYEoEsAAAALIlAFgAAAJZEIAsAAABLIpAFAACAJRHIwu8lJiZK/vz5pW3btp7uCgAAyAaWqIXfe+WVV6Rw4cIyffp0SUpKkvDwcE93CQAAZAEjsvBrFy9elAULFkjv3r3NiOzMmTNdri9dulSqVq0qISEh8thjj8msWbMkICBAzp4962izYcMGeeSRR6RgwYJSoUIF6d+/v1y6dMkDdwMAgH8hkIVfW7hwoURGRkq1atXkhRdekM8//1zsDykOHTokzz77rMTExMjOnTvl1VdflXfeecfl63/55Rdp3bq1dOjQQXbt2mWCYg1s+/bt66E7AgDAf5BaAL/WpEkT6dSpk7z++uty/fp1KVu2rCxatEiaN28ugwcPlv/85z+ye/duR/uhQ4fKmDFj5MyZM1K8eHGTlqD5tdOmTXO00UC2WbNmZlRWR3IBAIB7MCILv6X5sFu2bJHnn3/eHAcGBspzzz1ncmXt1xs0aODyNQ899JDLsY7UajqC5tjat+joaLl586YZ0QUAAO4T6Mb3BryaBqw6Cus8uUsfUAQHB8snn3yS5RxbTTnQvNi0IiIicrW/AADAFYEs/JIGsLNnz5aPPvpIWrVq5XJNc2LnzZtn8mZXrFjhcm3r1q0uxw888IDs27dPqlSpkif9BgAA/4ccWfilJUuWmDSCkydPSrFixVyuvfXWW7JmzRozEUyD2djYWOnRo4fs2LFD3njjDTly5IipWqBfpxO8GjVqJN27dzf5soUKFTKB7apVq7I8qgsAAHKGHFn4bVpBVFTULUGs0goE27ZtkwsXLsi///1v+fLLL6VOnToSHx/vqFqg6QdKz69bt072799vSnDVq1dPhg8fTi1aAADyACOyQDZoxYKpU6dKcnKyp7sCAIDfI0cWyMSUKVNM5YKSJUvKDz/8IB9++CE1YgEA8BIEskAmDhw4IKNHj5bTp0+bKgSaIztkyBBPdwsAAJBaAAAAAKtishcAAAAsiUAWAAAAlkQgCwAAAEsikAUAAIAlEcgCAADAkghkAQAAYEkEsgAAALAkAlkAAACIFf0/szm7hZLFDucAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1,2)\n",
    "sns.histplot(cleaned_titanic_train, x=\"Age\" ,ax=axes[0])\n",
    "sns.boxplot(cleaned_titanic_train, y=\"Age\", ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "大多数乘客年龄位于20岁到40岁之间，但有不少老年乘客以及婴儿。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 乘客年龄与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.histplot(cleaned_titanic_train, x=\"Age\", hue=\"Survived\", alpha=0.4)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从乘客年龄直方图来看，只有婴儿群体幸存比例较高，绝大部分其余年龄段都是遇难人数多于幸存人数。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 船票金额分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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zoToAACwl3vrrbeywHzlypWx//77x0knnRRPP/109ji5+eabo6KiIkaNGhVVVVUxfPjwmDJlSvHrU+D+wAMPxKWXXpqF661bt47Ro0fHxIkTS/iqAACgbgjRAQBgL3f33Xfvsr9ly5YxefLk7MiTVrE/+OCDe2B2AABQWmqiAwAAAABAQwzRb7vttjjmmGOyuorpSB/9fOihh4r9GzduzOoodurUKdq0aZN9fHT58uU1niNtaHTGGWdEq1atonPnznH11VfHli1bSvBqAAAAAABobEoaoh9wwAHxox/9KObPnx/PPfdcnHrqqfHlL385Fi1alPVfddVVcf/998f06dPjscceyzY5Ovvss4tfv3Xr1ixA37RpUzz11FPxy1/+Mu68886YMGFCCV8VAAAAAACNRUlrop955pk1rn/wgx9kq9PTJkYpYL/jjjti2rRpWbieTJ06Nfr06ZP1Dxo0KB5++OF4+eWXY9asWdGlS5fo379/3HDDDXHNNdfEddddFy1atCjRKwMAAAAAoDFoMDXR06rytKHRhg0bsrIuaXX65s2bY+jQocUxvXv3jl69esXcuXOz63Q++uijswC9YPjw4bF27drianYAAAAAACjLlejJwoULs9A81T9Pdc/vvffe6Nu3byxYsCBbSd6hQ4ca41NgvmzZsuxxOm8foBf6C315qqqqsqMghe4AAAAAANDgVqIfccQRWWA+b968uPTSS2P06NFZiZY9adKkSdG+ffvi0bNnzz36/QAAAAAAKE8lD9HTavNDDz00BgwYkIXb/fr1i5/97GfRtWvXbMPQ1atX1xi/fPnyrC9J53T90f5CX57x48fHmjVrisebb765R14bAAAAAADlreQh+kdt27YtK7WSQvXmzZvH7Nmzi32LFy+OpUuXZuVfknRO5WBWrFhRHDNz5sxo165dVhImT2VlZTZm+wMAAAAAABpUTfS0InzkyJHZZqHr1q2LadOmxaOPPhp/+MMfsjIrY8aMiXHjxkXHjh2zoPuKK67IgvNBgwZlXz9s2LAsLL/gggvixhtvzOqgX3vttXH55ZdnQTkAAAAAAJRtiJ5WkF944YXx7rvvZqH5MccckwXoX/ziF7P+m2++OSoqKmLUqFHZ6vThw4fHlClTil/ftGnTeOCBB7Ja6ilcb926dVZTfeLEiSV8VQAAAAAANBYlDdHvuOOOXfa3bNkyJk+enB15DjzwwHjwwQf3wOwAAAAAANjbNbia6AAAAAAA0FAI0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAAKAhhuiTJk2KE044Idq2bRudO3eOs846KxYvXlxjzCmnnBJNmjSpcXzjG9+oMWbp0qVxxhlnRKtWrbLnufrqq2PLli31/GoAAAAAAGhsmpXymz/22GNx+eWXZ0F6Cr3/7u/+LoYNGxYvv/xytG7dujju4osvjokTJxavU1hesHXr1ixA79q1azz11FPx7rvvxoUXXhjNmzePH/7wh/X+mgAAAAAAaDxKGqLPmDGjxvWdd96ZrSSfP39+fO5zn6sRmqeQfGcefvjhLHSfNWtWdOnSJfr37x833HBDXHPNNXHddddFixYt9vjrAAAAAACgcWpQNdHXrFmTnTt27Fij/a677or99tsvjjrqqBg/fnx88MEHxb65c+fG0UcfnQXoBcOHD4+1a9fGokWL6nH2AAAAAAA0Ng0mRN+2bVtceeWVMWTIkCwsL/ibv/mb+PWvfx1//OMfswD9X//1X+P8888v9i9btqxGgJ4UrlPfzlRVVWUh+/YHAADw//zoRz/K9iJK788LNm7cmJVi7NSpU7Rp0yZGjRoVy5cvr/F19ioCAKAxKmk5l+2lN+QvvfRSPPnkkzXaL7nkkuLjtOK8W7ducdppp8Wf//zn+MxnPrPbG5pef/31tZ4zAAA0Ns8++2z84he/iGOOOaZG+1VXXRW///3vY/r06dG+ffsYO3ZsnH322TFnzpys315FAAA0Vg1iJXp6A/7AAw9kq80POOCAXY4dOHBgdl6yZEl2Tm/SP7oCpnCdV0c9rWhPpWMKx5tvvllHrwQAAMrX+vXr47zzzov//b//d+y7777F9vSe+Y477oibbropTj311BgwYEBMnTo1C8uffvrpGnsVpU+Rpn2KRo4cme1VNHny5Ni0aVMJXxUAAJRxiF5dXZ0F6Pfee2888sgjcfDBB3/s1yxYsCA7pxXpyeDBg2PhwoWxYsWK4piZM2dGu3btom/fvjt9jsrKyqx/+wMAAPZ26dOhaTX50KFDa7TPnz8/Nm/eXKO9d+/e0atXr2yPot3dq0iZRQAAykGzUr9JnzZtWtx3333Rtm3bYg3z9PHQffbZJyvZkvpPP/30rPbiiy++mH2M9HOf+1zx46XDhg3LwvILLrggbrzxxuw5rr322uy5U1gOAAB8vLvvvjuef/75rJzLR6X32C1atIgOHTrUaE+BeeE9/O7sVaTMIgAA5aCkK9Fvu+227KOhp5xySrayvHD85je/yfrTG/VZs2ZlQXla6fKtb30r28Do/vvvLz5H06ZNs1Iw6ZxWpadNR1PtxYkTJ5bwlQEAQPlI5Q2/+c1vxl133RUtW7ast++rzCIAAOWgWanLuexKz54947HHHvvY5znwwAPjwQcfrMOZAQDA3iOVa0nlEY877rhiW9oo9PHHH49//Md/jD/84Q9ZXfPVq1fXWI2e9iIq7EOUzs8888yn2qsofXLUp0cBAGjoGsTGogAAQOmcdtpp2T5Daf+hwnH88cdnm4wWHjdv3jxmz55d/JrFixfH0qVLs0+D7u5eRQAAUA5KuhIdAAAovbQ/0VFHHVWjrXXr1tm+RIX2MWPGxLhx46Jjx45ZMH7FFVdkwfmgQYOyfnsVAQDQWAnRAQCAj3XzzTdHRUVFtkdRVVVVDB8+PKZMmbLDXkWXXnppFq6nEH706NH2KgIAoOwJ0QEAgB08+uijNa7ThqOTJ0/Ojjz2KgIAoDFSEx0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAGmKIPmnSpDjhhBOibdu20blz5zjrrLNi8eLFNcZs3LgxLr/88ujUqVO0adMmRo0aFcuXL68xZunSpXHGGWdEq1atsue5+uqrY8uWLfX8agAAAAAAaGxKGqI/9thjWUD+9NNPx8yZM2Pz5s0xbNiw2LBhQ3HMVVddFffff39Mnz49G//OO+/E2WefXezfunVrFqBv2rQpnnrqqfjlL38Zd955Z0yYMKFErwoAAAAAgMaiWSm/+YwZM2pcp/A7rSSfP39+fO5zn4s1a9bEHXfcEdOmTYtTTz01GzN16tTo06dPFrwPGjQoHn744Xj55Zdj1qxZ0aVLl+jfv3/ccMMNcc0118R1110XLVq0KNGrAwAAAACg3DWomugpNE86duyYnVOYnlanDx06tDimd+/e0atXr5g7d252nc5HH310FqAXDB8+PNauXRuLFi3a6fepqqrK+rc/AAAAAACgwYbo27ZtiyuvvDKGDBkSRx11VNa2bNmybCV5hw4daoxNgXnqK4zZPkAv9Bf68mqxt2/fvnj07NlzD70qAAAAAADKWYMJ0VNt9JdeeinuvvvuPf69xo8fn616LxxvvvnmHv+eAAAAAACUn5LWRC8YO3ZsPPDAA/H444/HAQccUGzv2rVrtmHo6tWra6xGX758edZXGPPMM8/UeL7UX+jbmcrKyuwAAAAAAIAGuxK9uro6C9DvvffeeOSRR+Lggw+u0T9gwIBo3rx5zJ49u9i2ePHiWLp0aQwePDi7TueFCxfGihUrimNmzpwZ7dq1i759+9bjqwEAAAAAoLFpVuoSLtOmTYv77rsv2rZtW6xhnuqU77PPPtl5zJgxMW7cuGyz0RSMX3HFFVlwPmjQoGzssGHDsrD8ggsuiBtvvDF7jmuvvTZ7bqvNAQAAAAAo2xD9tttuy86nnHJKjfapU6fG17/+9ezxzTffHBUVFTFq1KioqqqK4cOHx5QpU4pjmzZtmpWCufTSS7NwvXXr1jF69OiYOHFiPb8aAAAAAAAam2alLufycVq2bBmTJ0/OjjwHHnhgPPjgg3U8OwAAAAAA9nYlrYkOAAAAAAANmRAdAAAAAAByCNEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByCNEBAGAvd9ttt8UxxxwT7dq1y47BgwfHQw89VOzfuHFjXH755dGpU6do06ZNjBo1KpYvX17jOZYuXRpnnHFGtGrVKjp37hxXX311bNmypQSvBgAA6pYQHQAA9nIHHHBA/OhHP4r58+fHc889F6eeemp8+ctfjkWLFmX9V111Vdx///0xffr0eOyxx+Kdd96Js88+u/j1W7duzQL0TZs2xVNPPRW//OUv484774wJEyaU8FUBAEDdaFZHzwMAAJSpM888s8b1D37wg2x1+tNPP50F7HfccUdMmzYtC9eTqVOnRp8+fbL+QYMGxcMPPxwvv/xyzJo1K7p06RL9+/ePG264Ia655pq47rrrokWLFiV6ZQAAUHtWogMAADVWld99992xYcOGrKxLWp2+efPmGDp0aHFM7969o1evXjF37tzsOp2PPvroLEAvGD58eKxdu7a4mh0AAMqVlegAAEAsXLgwC81T/fNU9/zee++Nvn37xoIFC7KV5B06dKgxPgXmy5Ytyx6n8/YBeqG/0JenqqoqOwpS6A4AAA2NlegAAEAcccQRWWA+b968uPTSS2P06NFZiZY9adKkSdG+ffvi0bNnzz36/QAAYHcI0QEAgGy1+aGHHhoDBgzIwu1+/frFz372s+jatWu2Yejq1atrjF++fHnWl6Rzuv5of6Evz/jx42PNmjXF480339wjrw0AAGpDiA4AAOxg27ZtWamVFKo3b948Zs+eXexbvHhxLF26NCv/kqRzKgezYsWK4piZM2dGu3btspIweSorK7Mx2x8AANDQqIkOAAB7ubQifOTIkdlmoevWrYtp06bFo48+Gn/4wx+yMitjxoyJcePGRceOHbOg+4orrsiC80GDBmVfP2zYsCwsv+CCC+LGG2/M6qBfe+21cfnll2dBOQAAlDMhOgAA7OXSCvILL7ww3n333Sw0P+aYY7IA/Ytf/GLWf/PNN0dFRUWMGjUqW50+fPjwmDJlSvHrmzZtGg888EBWSz2F661bt85qqk+cOLGErwoAAOqGEB0AAPZyd9xxxy77W7ZsGZMnT86OPAceeGA8+OCDe2B2AABQWmqiAwAAAABADiE6AAAAAADkEKIDAAAAAEAOIToAAAAAAOQQogMAAAAAQA4hOgAAAAAA5BCiAwAAAABADiE6AAAAAADkEKIDAAAAAEAOIToAAAAAAOQQogMAAAAAQA4hOgAAAAAA5BCiAwAAAABADiE6AAAAAADkEKIDAAAAAEAOIToAAAAAAOQQogMAAAAAQA4hOgAAAAAA5BCiAwAAAABADiE6AAAAAADkEKIDAAAAAEAOIToAAAAAAOQQogMAAAAAQA4hOgAAAAAA1GWIfsghh8TKlSt3aF+9enXWBwAAAAAAe22I/sYbb8TWrVt3aK+qqoq33367LuYFAAAAAAAl1+zTDP6P//iP4uM//OEP0b59++J1CtVnz54dBx10UN3OEAAAAAAASuRThehnnXVWdm7SpEmMHj26Rl/z5s2zAP0f/uEf6naGAAAAAABQDiH6tm3bsvPBBx8czz77bOy33357al4AAAAAAFBeIXrB66+/XvczAQAAAACAxhCiJ6n+eTpWrFhRXKFe8C//8i91MTcAAAAAdmH9+vVxxx13xLp166Jt27YxZsyYaNOmTamnBdCo7FaIfv3118fEiRPj+OOPj27dumU10gEAgNL485//HFOnTs3OP/vZz6Jz587x0EMPRa9eveLII48s9fQA2EMmTZqUhegFH374YdaWQvTx48eXdG4AsbeH6LfffnvceeedccEFF9T9jAAAgE/ssccei5EjR8aQIUPi8ccfjx/84AdZiP7CCy9kKxPvueeeUk8RgD0coB9wwAHxxS9+MWbOnBlvvfVW1p76BekAJQzRN23aFJ/97GfraAoAAMDu+tu//dv4/ve/H+PGjcs+xl9w6qmnxj/+4z+WdG4A7BkpJC8E6Ndee23ss88+2eNDDz00W42e/l4ojFHaBaD2Knbni/7H//gfMW3atDr49gAAQG0sXLgw/vqv/3qH9rQa/f333y/JnADYs9InjQor0AsBekG67tGjR41xAJRgJfrGjRvjn/7pn2LWrFlxzDHHRPPmzWv033TTTbWcFgAA8El06NAh3n333Tj44INrtP/nf/5nMUQBoHFJm4gmqYTLzpx22mnxq1/9qjgOgBKE6C+++GL0798/e/zSSy/V6LPJKAAA1J9zzz03rrnmmpg+fXr2Xnzbtm0xZ86c+Pa3vx0XXnhhqacHwB6Qynelsi2pBnoq4fJRs2fPLo4DoEQh+h//+Mc6+NYAAEBt/fCHP4zLL788evbsGVu3bo2+fftm57/5m7/J6uQC0PiMGTMm2zg0bSKawvTtS7qk67fffrs4DoDa260QHQAAKL3q6upYtmxZ/PznP48JEyZk9dHTJnLHHntsHHbYYaWeHgB7SNosNB3pZ37aRDSV70olXNIK9EKAXhgDQIlC9C984Qu7LNvyyCOP1GZOAADAJwzR08f4Fy1alIXmaTU6AHuH8ePHZ6vRU5CegvNUA70gheepH4AShuiFeugFmzdvjgULFmT10UePHl1HUwMAAHaloqIiC89Xrlxp5TnAXigF5SlEv+OOO7JNRFMN9FTCxQp0gAYQot988807bb/uuuuyH94AAED9+NGPfhRXX3113HbbbXHUUUeVejoA1LMUmH/zm98s9TQAGrU6rYl+/vnnx4knnhg//elP6/JpAQCAHBdeeGF88MEH0a9fv2jRokWNzeWSVatWlWxuAADQGNRpiD537txo2bJlXT4lAACwC7fcckuppwAAAI3aboXoZ5999g4bGr377rvx3HPPxXe/+926mhsAAPAx7EkEAAANMERv3779DhsaHXHEETFx4sQYNmxYXc0NAAD4FDZu3BibNm2q0dauXbuSzQcAAPbaEH3q1Kl1PxMAAOBT27BhQ1xzzTXx29/+NlauXLlD/9atW0syLwAAaCxqVRN9/vz58corr2SPjzzyyDj22GPral4AAMAn8J3vfCf++Mc/xm233RYXXHBBTJ48Od5+++34xS9+ET/60Y9KPT0A9rAtW7bEvHnzso2kO3bsGAMHDoxmzep0CzyAvd5u/VRdsWJFnHvuufHoo49Ghw4dsrbVq1fHF77whbj77rtj//33r+t5AgAAO3H//ffHr371qzjllFPioosuipNPPjkOPfTQOPDAA+Ouu+6K8847r9RTBGAPmTFjRsyZMye2bdtWo23IkCExYsSIks4NoDGp2J0vuuKKK2LdunWxaNGi7Ded6XjppZdi7dq18b/+1/+q+1kCAAA7ld6LH3LIIcX65+k6Oemkk+Lxxx8v8ewA2FNSWP7EE09Eq1at4qyzzoq//du/zc7pOrWnfgBKGKKnH8RTpkyJPn36FNv69u2bfXT0oYceqqOpAQAAHycF6K+//nr2uHfv3llt9MIK9cKnRgFofCVc0gr0Nm3axNVXXx0nnHBCtG3bNjun69Se+tM4AEoUoqePCTVv3nyH9tS2/UeIAACAPeMvf/lL9t47lXB54YUXsra0CjEtbGnZsmVcddVVWZACQOOTaqCnvwOGDh26Q/3zdH3aaadl/WkcACUK0U899dT45je/Ge+8806xLW1elN6opx/UAADAnnXYYYfF+++/n70HTyUVv/rVr8bRRx8dr776akybNi3+8z//M3vPDkDjUyjdlT6BtDOF9sI4AEoQov/jP/5jVv/8oIMOis985jPZcfDBB2dtt956ay2nBAAAfJzq6uoa1w8++GBs2LAh21D07LPPjmOOOaZkcwNgz+rYsWN2Tr843ZlCe2EcALVT8zM/n1DPnj3j+eefj1mzZhV/MKf66OljRAAAAADsOQMHDsz2q0u5zLHHHlujpEuqgz579uyoqKjIxgFQzyvRH3nkkWwD0bTivEmTJvHFL34xrrjiiuxIm1cceeSR2Q7QAADAnpXej6fjo20ANH4pNB8yZEisX78+fvKTn8QzzzyTZTXpnK5Te+r/aL10AHbPp/ppesstt8TFF18c7dq126Gvffv28T//5/+Mm266KU4++eTdnA4AAPBJy7l8/etfj8rKyux648aN8Y1vfCNat25dY9y///u/l2iGAOxJI0aMyM5z5syJ++67LzuStAI95TKFfgDqOUR/4YUX4sc//nFu/7Bhw+KnP/1pHUwLAADYldGjR9e4Pv/880s2FwBKIwXlqbTuvHnzsk1EUw30VMLFCnSAuvWpfqouX748mjdvnv9kzZrFe++9VxfzAgAAdmHq1KmlngIADai0CwANpCZ6jx494qWXXsrtf/HFF6Nbt251MS8AAAAAACivEP3000+P7373u1m9xY/68MMP43vf+1781V/9VV3ODwAAAAAAyqOcy7XXXpttTHT44YfH2LFj44gjjsjaX3311Zg8eXJs3bo1/v7v/35PzRUAAAAAABpuiN6lS5d46qmn4tJLL43x48dHdXV11t6kSZMYPnx4FqSnMQAAAAAA0Bh86u2aDzzwwHjwwQfjv/7rv2LJkiVZkH7YYYfFvvvuu2dmCAAAAAAA5RKiF6TQ/IQTTqjb2QAAAAAAQLluLFrXHn/88TjzzDOje/fuWUmY3/3udzX6v/71r2ft2x8jRoyoMWbVqlVx3nnnRbt27aJDhw4xZsyYWL9+fT2/EgAAAAAAGqOShugbNmyIfv36ZbXU86TQ/N133y0e//Zv/1ajPwXoixYtipkzZ8YDDzyQBfOXXHJJPcweAAAAAIDGbrfLudSFkSNHZseuVFZWRteuXXfa98orr8SMGTPi2WefjeOPPz5ru/XWW+P000+P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ePXVV7PHGzdujG9961tx9913Zx9RGj58ePZmokuXLiWaMQAAAOzZFaUpEIOnnnoqFixYEPvss0/07ds35s+fHwMGDIiXX345Pvzww+jfv3989rOfLfU0aSA/N4BGHKInRx55ZMyaNat43azZ/5/yVVddFb///e9j+vTp0b59+xg7dmycffbZfssKAABAo5RKMlhRSnLOOedE27ZtswwkBehJOldUVMTJJ58cI0aMKPUUARqNBh+ip9C8a9euO7SvWbMm7rjjjpg2bVqceuqpWdvUqVOjT58+8fTTT8egQYNKMFsAAACA+pGC8qFDh8bDDz+chelDhgyJYcOG1ViACEDtVUQD99prr0X37t3jkEMOifPOOy+WLl1a/O3q5s2bs78sCnr37h29evWKuXPn7vI5U+mXtWvX1jgAAAAAyk0KzPv165c9TmcBOsBeFqIPHDgw7rzzzpgxY0bcdttt8frrr2cfSVq3bl0sW7Ys+xhbhw4danxNqoee+nZl0qRJWfmXwtGzZ889/EoAAAAAAChHDfrXkyNHjiw+PuaYY7JQ/cADD4zf/va32cYZu2v8+PExbty44nVaiS5IBwAAAACgrFaif1RadX744YfHkiVLsjrpmzZtitWrV9cYs3z58p3WUN9eZWVltGvXrsYBAAAAAABlHaKvX78+/vznP0e3bt1iwIAB0bx585g9e3axf/HixVnN9MGDB5d0ngAAAAAANA4NupzLt7/97TjzzDOzEi7vvPNOfO9734umTZvG1772tayW+ZgxY7KyLB07dsxWk19xxRVZgD5o0KBSTx0AAAAAgEagQYfob731VhaYr1y5Mvbff/846aST4umnn84eJzfffHNUVFTEqFGjoqqqKoYPHx5Tpkwp9bQBAAAAAGgkGnSIfvfdd++yv2XLljF58uTsAAAAAACAvbomOgAAAAAA1CchOgAAAAAAlGM5F+rHls2bYuHCP+2077jjjovKysp6nxMAAAAAQEMgRCfeev21WLLxw9jQtqpG+xt/eik7Dx48uEQzAwAAAAAoLSE6mV6f6RN9+w8s9TQAAAAAABoUNdEBAAAAACCHEB0AAAAAAHII0QEAAAAAIIcQHQAAAAAAcgjRAQAAAAAghxAdAAAAAAByNMvroLxt2bwpFi780w7tCxcujGh9WEnmBAAAAABQboTojdRbr78WSzZ+GBva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8ccfjzPPPDO6d+8eTZo0id/97nc1+tMWAxMmTIhu3brFPvvsE0OHDo3XXnutxphVq1bFeeedF+3atYsOHTrEmDFjYv369fX8StjepEmT4oQTToi2bdtG586d46yzzorFixfXGLNx48a4/PLLo1OnTtGmTZsYNWpULF++vMaYpUuXxhlnnBGtWrXKnufqq6+OLVu21POr4aNuu+22OOaYY7I/c+kYPHhwPPTQQ8V+97bx+NGPfpT9bL7yyiuLbe5vebruuuuye7n90bt372K/+woAANQnIXqJ/OY3v4lx48Zlu2c///zz0a9fvxg+fHisWLGi1FNjFzZs2JDdq/QLkJ258cYb4+c//3ncfvvtMW/evGjdunV2X9M/9gtSgL5o0aKYOXNmPPDAA1kwf8kll9Tjq+CjHnvssSyMefrpp7P7snnz5hg2bFh2vwuuuuqquP/++2P69OnZ+HfeeSfOPvvsYv/WrVuzsGbTpk3x1FNPxS9/+cu48847s1+qUFoHHHBAFq7Onz8/nnvuuTj11FPjy1/+cvbnMHFvG4dnn302fvGLX2S/MNme+1u+jjzyyHj33XeLx5NPPlnsc18BAIB6VU1JnHjiidWXX3558Xrr1q3V3bt3r540aVJJ58Unl/743HvvvcXrbdu2VXft2rX6Jz/5SbFt9erV1ZWVldX/9m//ll2//PLL2dc9++yzxTEPPfRQdZMmTarffvvten4F5FmxYkV2nx577LHifWzevHn19OnTi2NeeeWVbMzcuXOz6wcffLC6oqKietmyZcUxt912W3W7du2qq6qqSvAq2JV99923+p//+Z/d20Zi3bp11Ycddlj1zJkzqz//+c9Xf/Ob38za3d/y9b3vfa+6X79+O+1zXwEAgPpmJXoJpFVRaUVkKvVRUFFRkV3PnTu3pHNj973++uuxbNmyGve1ffv2Wamewn1N51TC5fjjjy+OSePT/U8r12kY1qxZk507duyYndOf17Q6fft7m8oK9OrVq8a9Pfroo6NLly7FMelTCGvXri2ueKb00urUu+++O/uUQSrr4t42DumTJGnV8fb3MXF/y1sqh5bKpx1yyCHZp7hSeZbEfQUAAOpbs3r/jsT777+fBTnb/8MuSdevvvpqyeZF7aQAPdnZfS30pXOqy7q9Zs2aZWFtYQyltW3btqye8pAhQ+Koo47K2tK9adGi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",
      "text/plain": [
       "<Figure size 1500x700 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2, figsize=[15, 7])\n",
    "sns.histplot(cleaned_titanic_train, x='Fare', ax=axes[0])\n",
    "sns.boxplot(cleaned_titanic_train, y='Fare', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "船票金额呈右偏态分布，说明数据集中的大多数船票价格中等，但有一些票价很高的极端值，使得均值被拉高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 船票金额与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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UAoAAACA7IRSAAAAAGQnlAIAAAAgO6EUAAAAANkJpQAAAADITigFAAAAQHZCKQAAAACyE0oBAAAAkJ1QCgAAAIDshFIAAAAAZCeUAgAAACA7oRQAAAAA2QmlAAAAAMhOKAUAAABAdkIpAAAAALITSgEAAACQnVAKAAAAgKYVSk2YMCGOOOKI2H333aNz584xfPjwmDt3brU2q1evjrPOOis6deoUu+22W4wcOTKWLFlSrc3ChQvj05/+dLRt27a4zje/+c1Yt25d5ncDAAAAQIMIpR5//PEicHr66afj4YcfjrVr18bgwYPjnXfeqWpz3nnnxT333BN33nln0X7RokUxYsSIqvPr168vAqk1a9bEU089FbfeemtMnjw5Lr744jp6VwAAAADUpKxUKpWinnjjjTeKkU4pfPrkJz8Zb731Vuyxxx5x++23x+c+97mizZw5c6J3794xY8aM+OhHPxoPPPBAHH/88UVY1aVLl6LNpEmT4t///d+L67Vq1arG1125cmW0b9++eL127dpFU3B4vyNiyv1PbbXNycOOjD88/1y2PgEAAAAN37bmLPWqplTqbNKxY8ficebMmcXoqUGDBlW12X///aNnz55FKJWkx4MPPrgqkEqGDBlSfAAvvfTSZl+noqKiOL/xBgAAAEA+9SaU2rBhQ5x77rnxsY99LA466KDi2OLFi4uRTh06dKjWNgVQ6Vxlm40Dqcrzlee2VMsqJXaVW48ePXbSuwIAAACgXodSqbbUiy++GFOmTNnprzV+/PhiVFbl9tprr+301wQAAADg/2kR9cDYsWPj3nvvjSeeeCL22muvquNdu3YtCpivWLGi2miptPpeOlfZ5tlnn612vcrV+Srb/KPWrVsXGwAAAABNcKRUqrGeAqm77rorpk+fHr169ap2vm/fvtGyZcuYNm1a1bG5c+fGwoULY+DAgcV+evzTn/4US5curWqTVvJLhbQOOOCAjO8GAAAAgAYxUipN2Usr6/3mN7+J3XffvaoGVKrz1KZNm+Jx9OjRMW7cuKL4eQqazj777CKISivvJYMHDy7Cpy9+8Ytx1VVXFde48MILi2sbDQUAAABQP9VpKHXjjTcWj0cddVS147fcckucdtppxdfXXnttNGvWLEaOHFmsmpdW1vvRj35U1bZ58+bF1L8xY8YUYdWuu+4ao0aNissvvzzzuwEA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tGnTJgYNGhQvv/xytTZvvvlmnHLKKdGuXbvo0KFDjB49OlatWpX5nQAAAADQYEKpd955J/r06RMTJ07c7Pmrrroqrr/++pg0aVI888wzseuuu8aQIUNi9erVVW1SIPXSSy/Fww8/HPfee28RdJ155pkZ3wUAAAAA26tF1KGhQ4cW2+akUVLXXXddXHjhhXHiiScWx376059Gly5dihFVJ598csyePTumTp0azz33XPTr169oc8MNN8SwYcPie9/7XjECCwAAAID6p97WlJo/f34sXry4mLJXqX379jFgwICYMWNGsZ8e05S9ykAqSe2bNWtWjKwCAAAAoH6q05FSW5MCqSSNjNpY2q88lx47d+5c7XyLFi2iY8eOVW02p6KiotgqrVy5spZ7DwAAAECDHCm1M02YMKEYdVW59ejRo667BAAAANCk1NtQqmvXrsXjkiVLqh1P+5Xn0uPSpUurnV+3bl2xIl9lm80ZP358vPXWW1Xba6+9tlPeAwAAAAANLJTq1atXESxNmzat2jS7VCtq4MCBxX56XLFiRcycObOqzfTp02PDhg1F7aktad26dbRr167aBgAAAEATqSm1atWqmDdvXrXi5rNmzSpqQvXs2TPOPffcuOKKK+IjH/lIEVJddNFFxYp6w4cPL9r37t07jjvuuDjjjDNi0qRJsXbt2hg7dmyxMp+V9wAAAADqrzoNpZ5//vk4+uijq/bHjRtXPI4aNSomT54c559/frzzzjtx5plnFiOiPv7xj8fUqVNjl112qXrObbfdVgRRxx57bLHq3siRI+P666+vk/cDAAAAwLYpK5VKpWji0rTAVPA81ZdqKlP5Du93REy5/6mttjl52JHxh+efy9YnAAAAoOnkLPW2phQAAAAAjZdQCgAAAIDshFIAAAAAZCeUAgAAACA7oRQAAAAA2QmlAAAAAMhOKAUAAABAdkIpAAAAALITSgEAAACQnVAKAAAAgOyEUgAAAABkJ5QCAAAAIDuhFAAAAADZCaUAAAAAyE4oBQAAAEB2QikAAAAAshNKAQAAAJCdUAoAAACA7IRSAAAAAGQnlAIAAAAgO6EUAAAAANkJpQAAAADITigFAAAAQHZCKQAAAACyE0oBAAAAkJ1QCgAAAIDshFIAAAAAZCeUAgAAACA7oRQAAAAA2QmlAAAAAMhOKAUAAABAdkIpAAAAALITSgEAAACQnVAKAAAAgOyEUgAAAABkJ5QCAAAAIDuhFAAAAADZCaUAAAAAyE4oBQAAAEB2QikAAAAAshNKAQAAAJCdUAoAAACA7IRSAAAAAGQnlAIAAAAgO6EUAAAAANkJpQAAAADITigFAAAAQHZCKQAAAACyE0oBAAAAkJ1QCgAAAIDshFIAAAAAZCeUAgAAACC7FvlfkvpgwYIFMeHKK2psAwAAALAzCKWaqPXr1sf4Madutc1dP/1htv4AAAAATYtQii2qqKiIw/sdUWO78k6d4qEHp2bpEwAAANA4CKXYorKyZjHl/qdqbHfysCOz9AcAAABoPBQ6BwAAACA7oRQAAAAA2QmlAAAAAMhOKAUAAABAdkIpAAAAALITSgEAAACQnVAKAAAAgOyEUgAAAABkJ5QCAAAAIDuhFAAAAADZCaUAAAAAyE4oBQAAAEB2QikAAAAAsmuR/yVhywYPOS6WLV++1TblnTrFQw9OzdYnAAAAoPYJpahXUiA15f6nttrm5GFHZusPAAAA0ASn71166aVRVlZWbdt///2rzq9evTrOOuus6NSpU+y2224xcuTIWLJkSZ32GQAAAIAGHkolBx54YLz++utV25NPPll17rzzzot77rkn7rzzznj88cdj0aJFMWLEiDrtLwAAAACNYPpeixYtomvXrpscf+utt+InP/lJ3H777XHMMccUx2655Zbo3bt3PP300/HRj360DnoLAAAAQKMYKfXyyy9H9+7dY5999olTTjklFi5cWByfOXNmrF27NgYNGlTVNk3t69mzZ8yYMWOr16yoqIiVK1dW2wAAAADIp16HUgMGDIjJkyfH1KlT48Ybb4z58+fHJz7xiXj77bdj8eLF0apVq+jQoUO153Tp0qU4tzUTJkyI9u3bV209evTYye8EAAAAgAYzfW/o0KFVXx9yyCFFSLX33nvHL3/5y2jTps0OX3f8+PExbty4qv00UkowBQAAAJBPvR4p9Y/SqKh999035s2bV9SZWrNmTaxYsaJam7T63uZqUG2sdevW0a5du2obAAAAAPk0qFBq1apV8corr0S3bt2ib9++0bJly5g2bVrV+blz5xY1pwYOHFin/QQAAACgAU/f+8Y3vhEnnHBCMWVv0aJFcckll0Tz5s3j85//fFELavTo0cU0vI4dOxajnc4+++wikLLyHgAAAED9Vq9D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do3iWm+vrFd9LytrFjf95Gc1XuvIT368Xn6m29L/j33y47Hy7VU1Xiv9HVBb929t/znW1K+i7zW8x219f9tyrVKUbdP3zdGDjqmVvtf293Nt9qs2v2/4v9at31Djn+O2/BkmS5YujVt+tfXplR87+IO19n1Tm95bXRGPPjI9a7+29e8u3/MAUHdq83f/+q7yPdQ0SKKsVF+HUWyjRYsWxZ577hlPPfVUDBw4sOr4+eefH48//ng888wzmzzn0ksvjcsuuyxzTwEAAACajtdeey322muvxjtSqry8PJo3bx5Lliypdjztd+3adbPPSVP9UmH0Shs2bIg333wzOnXqFGVlZdGQk8gePXoUf+jt2rWr6+5AveC+gE25L2BT7guozj0Bm3JfbLs0/untt9+O7t27b7Vdgw+lWrVqFX379o1p06bF8OHDq0KmtD927NjNPqd169bFtrEOHTpEY5FuDjcIVOe+gE25L2BT7guozj0Bm3JfbJv27dvX2KbBh1JJGvU0atSo6NevX/Tv3z+uu+66eOedd6pW4wMAAACgfmkUodRJJ50Ub7zxRlx88cWxePHiOPTQQ2Pq1KmbFD8HAAAAoH5oFKFUkqbqbWm6XlORpiRecsklm0xNhKbMfQGbcl/AptwXUJ17Ajblvqh9DX71PQAAAAAanmZ13QEAAAAAmh6hFAAAAADZCaUAAAAAyE4o1YhMnDgxPvjBD8Yuu+wSAwYMiGeffbauuwQ7xRNPPBEnnHBCdO/ePcrKyuLuu++udj6VykurcXbr1i3atGkTgwYNipdffrlamzfffDNOOeWUaNeuXXTo0CFGjx4dq1atyvxOoPZMmDAhjjjiiNh9992jc+fOMXz48Jg7d261NqtXr46zzjorOnXqFLvttluMHDkylixZUq3NwoUL49Of/nS0bdu2uM43v/nNWLduXeZ3A+/fjTfeGIccckjx93zaBg4cGA888EDVefcDRHznO98pfpc699xzq465N2hqLr300uI+2Hjbf//9q867J3YuoVQjcccdd8S4ceOKlQD+8Ic/RJ8+fWLIkCGxdOnSuu4a1Lp33nmn+B5PQezmXHXVVXH99dfHpEmT4plnnoldd921uB/SD5RKKZB66aWX4uGHH4577723CLrOPPPMjO8Catfjjz9e/ML09NNPF9/Xa9eujcGDBxf3S6Xzzjsv7rnn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52Ik1ssvv1xn7wUAYEvKSqVSaYtnAQDYqTWlfv7zn8cuu+xSdWzo0KFx5513Vmv3q1/9Kr7yla/EsmXLqkZKnX766TFr1qzo06dPcSyNlNpnn32Kx+7du1c9d9CgQdG/f//49re/ne19AQBsCzWlAADq0NFHHx033nhj1X6advfII4/EhAkTYs6cObFy5cpYt25drF69uhgd1bZt26Jdq1at4pBDDql63p/+9KeittS+++5b7fppSl+nTp0yviMAgG0jlAIAqEMphPrwhz9ctf/qq6/G8ccfH2PGjIkrr7wyOnbsGE8++WSMHj061qxZUxVKtWnTpihuXinVnGrevHnMnDmzeNzYbrvtlvEdAQBsG6EUAEA9kkKlDRs2xPe///2q1fR++ctf1vi8ww47rBgptXTp0vjEJz6RoacAAO+PQucAAPVIGjW1du3auOGGG+Kvf/1r/OxnP4tJkybV+Lw0be+UU06JU089NX7961/H/Pnz49lnny2mAd53331Z+g4AsD2EUgAA9UgqXH7NNdcUK+sddNBBcdtttxXB0ra45ZZbilDq61//euy3334xfPjweO6556Jnz547vd8AANvL6nsAAAAAZGekFAAAAADZCaUAAAAAyE4oBQAAAEB2QikAAAAAshNKAQAAAJCdUAoAAACA7IRSAAAAAGQnlAIAAAAgO6EUAAAAANkJpQAAAADITigFAAAAQHZCKQAAAAAit/8D83Iu+hkA/NQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1200x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplots(1, 1, figsize=[12, 5])\n",
    "sns.histplot(cleaned_titanic_train, x='Fare', hue='Survived', alpha=0.4)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "从船票金额直方图来看，高船票金额的幸存比例普遍更高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 船舱等级与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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TBsnEwoHDx5sp/Kvvvpq/c///I99jtnhbiqPZhr9hhtu0D333HPMr2+CrjnYw6wPPdymp4ZM+6hLL720yeebnfkrV660S5ECm5tmzpxp15iatajGL37xC11++eW224jpz2w+/o9+9KPj/nsB4DxPLc3eAOC4PPbYY/YK9NI0R/vOmzfPruU2JkyYoBUrVjR6n//6r/+yu8UDzK5yU1F85513bFA0ocp0zDhag/qGzA52M5VtNgAFQlqACW67du2yFUizlhSN8feDhjiStPUd6ftVQ0zlA8BxMtPHgalj87u9abtkppo/+eQTG1INU300U88NK38NG8Kfe+65dvr6/ffft2s5zTpwszv917/+tSOfEwC4AcEUAI6TmaZu6N5777UVVNMiKRBMTRA93NGbb775pj3g4q233lLnzp01fPhw3X333brlllt0xx132J3qABCOWGOK4+avrVVFda2KK/w6VOrXvqIa7S2o1pcHq7Vzf5W+OFitr/Krta+4RvllfpVW+lVVU8sRgQhJpvr53HPP2d3sZn1jgGlv1KFDB7t+07RsCzSQN8xuddMs3oTSAHO6kZnqMjvTASBcUTFFvRp/rYrKa1VY4a+7LferqMKvymrZYGkvv3neib2+x/yD80mRPo+ivr6NjvAoKcaj5FivUmK99jbKZ54JuNv69ettEDVrFc0aUXMEpmm3ZJjjN83582Y3ujlNyVRCt27daneSGzk5OY1CqRF42zx2OOZQjIYHY5ggCwChhGAahkzlsrC81lY7D5XVVT3zS/0qrmzdiqZ59aqaupBbVztq+uPFRXmUHGOCqqc+rJrbqAgCK9zD9AU2vT3NQv4XX3zRbl4yG55MOL3mmmvqn2cqo6bPpukhbE4qMkd3niizOerOO+9soc8AANyHYBomQXR/iV97C2qUXVCjA6X+E656toXSylqVVtYo+1vFoNhIj1LjvOqS5FOXJK/9s2kzAzjBrAM1Td4N01LJHFzx8MMP649//ON3nhvoy2mO1jTB1Kw9XbNmTaPn5Obm2tvDrUs1zJKAOXPmNKqYZmRktNjnBABOI5iGqJKKuiC6t7AujFbWKOiVVdXqq4IaexnREVLnRBNSfeqW7FNiDEum4Ry/399omr2hwKlJpnJqmCUAZsOUaVxvTjQyli5daluoBJYDNCU6OtpeABCqCKYhorqmVjlFdSHU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x4TSjRs3aunSpVq8eLENu9dcc00bfhYA4D6hdSTp4ZjejsPPk1b+UaqucHo0OAaZReXaxh6oJnWMaKfTk0c6PYywNmXKFHs1xVRLH3roId16660677zz7H1/+ctf1LlzZ1tZveSSS7R582YtWbJEH374oUaOrPtaLliwQFOnTtXvfvc7W4kFgHAUHhVTIzZZOmmy06PAMeqRs9fpIbhSpCdCP0g9XREe1k271a5du5STk2On7wOSk5M1ZswYrVq1yr5tbs30fSCUGub5Xq/XVlgBIFyFTzA10odJXQY6PQocg8TiQrX3Mp3/bZOST1W7iCSnh4EjMKHUMBXShszbgcfMbadOnRo9HhERodTU1PrnNKWiokKFhYWNLgAIJeEVTI1hP6zbEAXXy6wIj5Umx2p4fH8NjOt1TM+dP3++Ro0apcTERBuAzj//fG3durXVx4jWZb6upvoauDIyWGcMILSEXzCNiJJGXSJFU41zu54H850egmt0jeyo05NGHfPzV6xYoVmzZmn16tV2c01VVZXOPvtsu2kHratLly72Njc3t9H95u3AY+Y2Ly+v0ePV1dV2p37gOU2ZO3euCgoK6q+srKxW+RwAwCnhWZIy601HXiSt+ovkr3Z6NDiMbrl7FNklU1W14f01ivPG2HWlx3O6k9lY09DTTz9tK6dr167V+PHjW2GUCOjZs6cNl8uWLdPw4cPtfWbK3awdve666+zbY8eOVX5+vv16jBgxwt739ttvy+/327WohxMdHW0vBL8X1+yTm104moM74IzwDKZGSre6nfof/8PpkeAwfDU1Sq9N0C7lh/Vmp/NTJyrRF9es1zHVNcOsYUTzmX6jO3bsaLThad26dfbvt3v37rrhhht0zz33qG/fvjao3nbbbXanvVlSYQwcOFDnnHOOrr76attSylS0Z8+ebXfssyMfQDgL32BqdB0k9TsgbVvu9EhwGJkl1doVr7DklVfT2p2uLlEdmvU6pgpngtK4ceM0ePDgFhtfOPvoo490xhnfHNwxZ84ceztjxgxbnb755pvtsgnTl9RURk877TRbxY6Jial/n2effdaG0TPPPNPuxp8+fbrtfQoA4Sy8g6nR9/tSyQHpq/VOjwRNyMzNlnqFZ0PTs1PGKjOmW7Nfx6w13bBhg959990WGRekCRMm2H6lh2NOg7rrrrvsdTimurpw4cJW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BYIpAAAAXIFgCgBAGJswYYJuuOEGp4cBWARTAACCnDk21Bwraq6oqCj16dNHd911l6qrq50eGnBcIo7v6QAAwI3OOecce7Z9RUWFXnvtNc2aNUuRkZGaO3eu00MDjhkVUwAAQkB0dLS6dOmiHj166LrrrtOkSZP0r3/9yz723nvv2Sn7uLg4tWvXTpMnT9ahQ4eafJ2//vWvGjlypBITE+3r/eQnP1FeXl794+b9LrvsMnXs2FGxsbHq27evDcRGZWWlZs+era5duyomJsaOZf78+W30N4BQQMUUAIAQZELjgQMHtG7dOp155pm66qqr9PDDDysiIkLvvPOOampqmny/qqoq3X333erfv78NpHPmzLFLBUwV1rjtttu0adMmvf766+rQoYN27NihsrIy+9gf/vAHG4b//ve/q3v37srKyrIXcKwIpgAAhJDa2lotW7ZMb7zxhq6//nrdf//9tgL66KOP1j/npJNOOuz7mwAb0KtXLxs2R40apeLiYiUkJGj37t06+eST7WsamZmZ9c83j5kK6mmnnWbXu5qKKXA8mMoHACAELF682AZHM4U+ZcoUXXzxxbrjjjvqK6bHau3atZo2bZqteJrp/NNPP70+dBpmmcBzzz2n4cOH6+abb9b7779f/76msmo+nqm2/vznP9ebb77ZCp8pQhnBFACAEHDGGWfYULh9+3Y7tf7MM88oPj7eTukfq5KSErv+NCkpSc8++6w+/PBDLVq0qH79qGFC75dffqkbb7xRe/futaH3l7/8pX3slFNO0a5du+xSADOGiy66SBdeeGErfcYIRQRTAABCgAmhpk2UqXSadaQBQ4cOtVP7x2LLli12Xep9992n73//+xowYECjjU8BZuPTjBkz9Le//U0PPfSQ/vSnP9U/ZkKtqdb++c9/1vPPP69//OMfOnjwYAt9lgh1rDEFACCEmXZRQ4YM0c9+9jNde+21ts+p2fz04x//2G5easiEWvP4ggUL7HM3bNhgq58NzZs3TyNGjLDrVE1rKrOEYODAgfaxBx54wO7IN2tQvV6vXnjhBbuzPyUlpU0/ZwQvKqYAAISwfv362bWen376qUaPHq2xY8fq5ZdfblRVbVgJffrpp22gHDRokK2c/u53v2v0HBNcTdg1ldjx48fL5/PZNaeGWZMa2GxlNkx98cUXdje/CanAsfDUmu17AAAAgMP4FQYAAACuQDAFAACAKxBMAQAA4AoEUwAAALgCwRQAAACuQDAFAACAKxBMAQAA4AoEUwAAALgCwRQAAACuQDAFAACAKxBMAQAA4AoEUwAAAMgN/j+d3X1+MulSoQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "pclass_count = cleaned_titanic_train[\"Pclass\"].value_counts()\n",
    "pclass_label = pclass_count.index\n",
    "axes[0].pie(pclass_count, labels=pclass_label)\n",
    "sns.countplot(cleaned_titanic_train, x=\"Pclass\", hue=\"Survived\", ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从是否幸存与船舱等级之间的柱状图来看，船舱等级低的乘客中遇难比例更大，船舱等级高的乘客中幸存比例更大。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 性别与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "sex_count = cleaned_titanic_train[\"Sex\"].value_counts()\n",
    "sex_label = sex_count.index\n",
    "axes[0].pie(sex_count, labels=sex_label)\n",
    "sns.countplot(cleaned_titanic_train, x=\"Survived\", hue=\"Sex\", ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从是否幸存与性别之间的柱状图来看，男性乘客中遇难比例更大，女性乘客中幸存比例更大。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 登船港口与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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66ZCqc+IESNUW3bv3l3r69jtdnW++kFEFEx022NaavfCY5z3SyLNlBhoyszatWvhcDgueLyyshJffvllg57T4/Hg4YcfxsCBA1UA9bnzzjvRqlUrpKWlYceOHaonVOahvvfee+p8Tk5OjVAqfPfl3MXmts6ZM6dB7SQiCgS6DaYcxidqGqUO+SXQC7PJhGAlwdBHhs+rBz+Z6ylD8y1atGjQc8tc0127duGrr76q8fh9991X9bH0jKampmLIkCE4fPgw2rZt26DXkl7XGTNmVN2XHtP09PQGPRcRkR7pN5gaqBeHSEte77kRipiw4A2mMn/TtzK+tiH78PBwvPjii/V+3mnTpmHFihX44osv0LJly0te269fP3V76NAhFUxl7ummTZtqXJObm6tuLzYv1WazqYOIKFjpNpjKGyURNV0FjJgw3U45v2JHjx6F1+tFmzZtVBhMSkqqOieLjGThksVS98oE8lzTp0/H+++/r6YHtG7d+rKfk5mZqW6l51QMGDAA8+bNQ15ennp9sXr1asTExKBLly4N+CqJiAKfboNppZPBlKiplAT5AiiZ6+mbD+oPMny/fPly/Pvf/1a1TH1TA2JjY1XvqwzXy/nRo0cjISFBTSV45JFH1Ir97t27q2ulvJQE0IkTJ2LBggXqOWbNmqWem72iRGRU+g2mruB+oyTSE7uBft4OHjyIzz//XPVUnh9UZ8+eXafnWLx4cVUR/epee+01TJ48WfXCShmohQsXoqysTM0DnTBhggqePtJDK9MA7r//ftV7KvVPJ02aVKPuKRGR0eg3mLLHlKjJGCWY/vWvf1VBUEo4yTxOmXPqIx/XNZjKUP6lSBCVIvx16cn973//W6fXJCIyAgZTIjJMMH322WfVvE4p3URERPqjy9UOUrrG4da6FUTGYTfI9uxnz57FT3/6U62bQUREgRRM7ewtJWpSDrcxfuYklMpWoEREpE+6HMqvNEjvDZFeGGUov127dnjyySexceNGVfQ+JCSkxvmHHnpIs7YREZFOg6nTIL03RHphlGD6l7/8BVFRUWph0vmLk2TxE4MpEZG2dBlML7PglYj8zGmQOd1SaJ+IiPRLl3NMmUuJtFl0SEREpCVd9ph6+P5I1ORULv2hrGdQuvfeey95/tVXX22ythARUYAE08sVryYi//MapFxUdU6nE7t27UJhYSEGDx6s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ZDJh3759WjeF6vjLggz1U9MKCwvDsGHD8OSTT+Lrr7/G5MmT1fakwYzBlIiImpwspJHSN4sWLUJZWVmtiz+oabRr1079krB3795az8vjSUlJnPerA126dKn15yWYMJgSEZEmJJS63W707dsX7777rhpSlhD0pz/9Sa0Qp6aRkJCgeuVeeuklVFRUXFBndtmyZaqnjppOQUEBBg8ejH/+859qXunRo0fx9ttvY8GCBbj55psRzFguioiINJOdnY158+ZhxYoV6mPpmZPapo888oiq2UhNQ34puPbaa9V80vPLRclCnC+//FKtEqemYbfb8fTTT6sqCYcPH4bT6VSbT/z0pz9Vi6DOX6QWTBhMiYiISG14IGFIynjl5eWpOafjx4/HP/7xD0RERGjdPDIIBlMiIiK6gCyy+eMf/4jVq1ejf//+WjeHDILBlIiIiGr12muvoaioCA899BDMZi5LocbHYEpEREREusBff4iIiIhIFxhMiYiIiEgXGEyJiIiISBcYTImIiIhIFxhMiYiIiEgXGEyJiIiCmBTN79mzZ6M899q1a2EymVBYWOjXQv/ynJmZmX57TgocDKZEREQ6IXvSSyg7/xg5cqTWTSNqEtameRkiIiKqCwmhUti+OpvNBr2R/duJ/I09pkRERDoiITQlJaXG0axZM3VOek9ffvlljB07Vu1f37lzZ2zYsAGHDh3CoEGDEBkZiWuvvRaHDx++4Hnl89LT09Xn3XbbbWpHJ59vv/0Ww4YNQ2JiImJjY3HDDTdg69atNT5fXnvx4sW46aab1OvMmzfvgtcoLy/HqFGjMHDgwKrh/b/97W+qnWFhYejUqRNeeumlGp+zadMmXHPNNep8nz59sG3bNr99LynwMJgSEREFkGeeeQZ33323moMpQe/OO+/EL37xC8ycORObN2+GbOg4bdq0Gp8jwfVf//oXPvzwQ6xcuVKFvwceeKDqfElJCSZNmoSvvvoKGzduRPv27TF69Gj1+PnzVX/yk59g586duPfee2uckyAq4dbj8WD16tWIi4vDsmXLMHv2bBVi9+7di9/85jd48skn8frrr6vPKS0tVSG7S5cu2LJli3r+//u//2vU7x/pnGxJSkRERNqbNGmS12KxeCMjI2sc8+bNU+flbXvWrFlV12/YsEE99sorr1Q99sYbb3jDwsKq7j/11FPqOU+ePFn12Mcff+w1m83e7OzsWtvhdru90dHR3g8//LDqMXmdhx9+uMZ1n3/+uXp879693u7du3snTJjgtdvtVefbtm3rXb58eY3PeeaZZ7wDBgxQH7/88svehIQEb0VFRdX5xYsXq+fctm1bPb97FAw4x5SIiEhHbrzxRjVkXl18fHzVx927d6/6ODk5Wd1269atxmOVlZUoLi5GTEyMeiwjIwMtWrSoumbAgAGqZ3P//v1qqkBubi5mzZqlVtnn5eXB7XarYfnjx4/XaIcMtddGekr79u2Lt956CxaLRT1WVlamphRMmTIFU6dOrbrW5XKp6QJCelHl65Fh/OptI+NiMCUiItIRmb/Zrl27i54PCQmpMe/zYo9J8KwrGcYvKCjACy+8gFatWql5rhIQHQ7HBW2rzZgxY/Duu+9iz549VSFZhunFX//6V/Tr16/G9b7wSnQ+BlMiIqIgJz2fWVlZSEtLU/dlHqnZbEbHjh3V/fXr16tFSTKvVJw4cQKnT5+u8/M/99xziIqKwpAhQ1Svq8wZlZ5beb0jR47grrvuqvXzZFHUP/7xD9XD6+s1lbaRcTGYEhER6YjdbkdOTk6Nx6xWq1ox31AS+qRX9Pe//70a4n/ooYfUynwZxhey2EkCogzVy/nHHnsM4eHh9XoNeW6ZAjB48GAVTmVh1pw5c9RrydC9lMGSr00WaJ09exYzZsxQC7d+/etfq6F+WbwlxfXleci4uCqfiIhIR2TVfGpqao3juuuuu6LnlKkB48ePVz2iw4cPV/M6q5dteuWVV1RY7NWrFyZOnKjCZPPmzev9Os8//7wKvBJODxw4gP/5n/9R5aKkLqsM8UsZqqVLl6J169bqeulllUoBsspfSkZJSP3tb397RV8rBTaTrIDSuhFEREREROwxJSIiIiJdYDAlIiIiIl1gMCUiIiIiXWAwJSIiIiJdYDAlIiIiIl1gMCUiIiIiXWAwJSIiIiJdYDAlIiIiIl1gMCUiIiIiXWAwJSIiIiJdYDAlIiIiIl1gMCUiIiIi6MH/BwcTYEtPlgoFAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "embarked_count = cleaned_titanic_train[\"Embarked\"].value_counts()\n",
    "embarked_label = embarked_count.index\n",
    "axes[0].pie(embarked_count, labels=embarked_label)\n",
    "sns.countplot(cleaned_titanic_train, x=\"Embarked\", hue=\"Survived\", ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从是否幸存与登船港口之间的柱状图来看，瑟堡登船的乘客，幸存数量大于遇难数量，而皇后镇和南安普敦则相反。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 家庭成员数量与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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wWq1ol+/fhgzZozqvZTFKc8++2xIzi1TPGQh3AknnACz2awOCcayAEY+ll52LaSkpGDAgAHYsWNHyM4pq9EPf0MwePDgkE8vED/99BM+/fRT/N///R+05P+dEIrfFwynRERRSoKQhKClS5e26jGS66Ge56glWfshwVSG0D/77DP07t0beiH/Hw6HIyTnOuOMM9S0Aum59R/SeyhzPuVjeSOjhdraWuzcuVMFxlCRaR2HlxPbtm2b6sENtXnz5ql5rzIPWEvycyEhtOXvi+rqarVqP9C/LzisT0QUxaSMlAxTSggZP348nnnmGbUI54Ybbghp+GjZKyZzDCUMyYKkHj16hGQof8GCBXj33XdVrVP//DlZ7CG1HENl5syZauhWPmeZXyltWrZsmZrzGAryuR8+z1ZKBUmdz1DOv/31r3+tam1KEDxw4IAqcybB+MorrwxZG+655x5MnjxZDetfdtllqvbvP//5T3WE+s3JvHnz1M+o9F5r/bMo87Eff/xxNRdXwuqDDz6ophpIbeCACujafyIiCjuzZ8/29ejRw2e1WlVpqdWrV4f0/J9//rkqW3P4cd1114Xk/G2dW4558+b5QunGG2/09ezZU/0/ZGRk+M444wzfJ5984tOSFqWkLr/8cl92drb6OnTv3l1d37Fjhy/U3n//fd+wYcNUqaRBgwb5/vnPf4a8DR9//LH6Xty6dasufhalnNSDDz7oy8rKUl8X+R4NRtsM8k9g4y4RERERUedwzikRERER6QbDKRERERHpBsMpEREREekGwykRERER6QbDKRERERHpBsMpEREREekGwykRERER6QbDKRERERHpBsMpERFRlOnVq5faqtbPYDDgnXfe0bRNRH4Mp0RERBq7/vrrVUA8/Gi5z3kgff3117jllls6/fzTTjtNte/1119vdbsEXgm+RF3BcEpERKQDZ599NgoKClodvXv3Dsq5MjIyEBcX16XXiImJwQMPPACXyxWwdhEJhlMiIiIdsNlssNvtrY5nn30Ww4cPR3x8PPLy8vDLX/4StbW1zc+ZP38+UlJSsGjRIgwcOFAFzksuuQT19fV4+eWXVS9mt27dcOedd8Lj8Rx1WL+lKVOm4Pbbb291W0lJCaxWK5YuXdp825VXXonKykq88MILx+wRnjFjRqvb7r77btXz6icf33HHHep2aWtWVpZ6zbq6Otxwww1ITExEv3798NFHH3XwK0rhiuGUiIhIp4xGI/72t79h06ZNKmx+9tln+M1vftPqMRJE5TEyxL548WIsW7YMF154IT788EN1/Pvf/8bzzz+Pt99+u13n/L//+z8sWLAADoej+bZXX30V3bt3V8HVLykpCf/v//0/PPbYYypIdoV8bunp6Vi7dq0KqrfeeisuvfRSTJ48Gd988w3OOussXHPNNepzpcjHcEpERKQD0vuZkJDQfEg4k97E008/XfV0SjB8/PHH8eabb7Z6ngyrz5kzB6NHj8Ypp5yiek5XrlyJF198EUOGDMF5552nXuPzzz9vVzsuuugidfnuu++26qH1z4ttSXpyZXj/L3/5S5c+95EjR6opAv3798fMmTPVa0pYvfnmm9VtDz30EMrKyvD999936TwUHsxaN4CIiIigAqSETD8Zyv/0008xa9YsbNmyBdXV1XC73WhsbFQ9iP45o3LZt2/f5ufJsLiEWQm4LW8rLi5uVzskGEov5UsvvYTLLrtM9Vz+8MMPeO+999qciiA9p/7ezs4aMWJE88cmkwlpaWlqOkPL9ov2fg4U3thzSkREpAMSRmVupf+QYXXp9ZTg9t///hfr16/Hc889px7rdDqbn2exWFq9jvRutnWb1+ttd1tkaH/JkiXYt28f5s2bp3pte/bs2eZjr776anWf9Oq2NS3B5/O1uq2tBVTH+xz8PbYd+RwofDGcEhER6ZCEUQljf/7znzFx4kQMGDAABw4cCMm5pddy7NixamGSzD+98cYbj/pYCaDSuyu9vnv27DmiKoBUHWhpw4YNQWs3RQaGUyIiIh2S3lPpZZw9ezZ27dqlFjbNnTs3ZOeX3tMnn3xS9XzKAqtjOffcczFhwgS18Kol6XFdt24dXnnlFWzfvh0PP/ywmiJAdCwMp0RERDoki4RkodEf//hHDBs2DK+99prqoQwVKRVlNpvVpcxDPR5pp8yHbWnatGl48MEHVYWBcePGoaamBtdee20QW02RwOA7fDIIERERRT0ZopeFVrKb1AknnKB1cyiKMJwSERFRM5lKIGWbfv3rX2P37t348ssvtW4SRRkO6xMREVEzCaPZ2dmqxzSUc1yJ/NhzSkRERES6wZ5TIiIiItINhlMiIiIi0g2GUyIiIiLSDYZTIiIiItINhlMiIiIi0g2GUyIiIiLSDYZTIiIiItINhlMiIiIi0g2GUyIiIiKCXvx/RC6OUsvSoDIAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "familyNum_count = cleaned_titanic_train['FamilyNum'].value_counts()\n",
    "familyNum_label = familyNum_count.index\n",
    "axes[0].pie(familyNum_count, labels=familyNum_label)\n",
    "sns.countplot(cleaned_titanic_train, x='FamilyNum', hue='Survived', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从是否幸存与乘客家庭成员之间的柱状图来看，独身的乘客中遇难的多于幸存的。从有携带家庭成员的乘客来看，家庭成员在1～3位之间的幸存人数超过遇难人数，但同乘家庭成员超过3位后，遇难的更多。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分析数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在分析步骤中，我们将利用以上清理后到的数据，进行逻辑回归分析，目标是得到一个可以根据泰坦尼克号乘客各个属性，对沉船事件后幸存情况进行预测的数学模型。\n",
    "\n",
    "我们先引入做逻辑回归所需的模块。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "import statsmodels.api as sm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "然后可以创建一个新的DataFrame`lr_titanic_train`，让它作为我们进逻辑性回归分析所用的数据。\n",
    "\n",
    "和`cleaned_titanic_train`区分开的原因是，我们在进行回归分析前，还可能需要对数据进行一些准备，比如引入虚拟变量，这些都可以在`lr_titanic_train`上执行。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  PassengerId Survived Pclass  \\\n",
       "0           1        0      3   \n",
       "1           2        1      1   \n",
       "2           3        1      3   \n",
       "3           4        1      1   \n",
       "4           5        0      3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  FamilyNum  \n",
       "0      0         A/5 21171   7.2500   NaN        S          1  \n",
       "1      0          PC 17599  71.2833   C85        C          1  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S          0  \n",
       "3      0            113803  53.1000  C123        S          1  \n",
       "4      0            373450   8.0500   NaN        S          0  "
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_titanic_train = cleaned_titanic_train.copy()\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "移除大概率不会影响乘客幸存概率的变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Survived Pclass     Sex   Age  SibSp  Parch     Fare  FamilyNum\n",
       "0        0      3    male  22.0      1      0   7.2500          1\n",
       "1        1      1  female  38.0      1      0  71.2833          1\n",
       "2        1      3  female  26.0      0      0   7.9250          0\n",
       "3        1      1  female  35.0      1      0  53.1000          1\n",
       "4        0      3    male  35.0      0      0   8.0500          0"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_titanic_train = lr_titanic_train.drop(['PassengerId', 'Name', 'Ticket', 'Cabin', 'Embarked'], axis=1)\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据里还存在分类变量，无法直接建立逻辑回归模型。我们需要引入虚拟变量，也就是用0和1分别表示是否属于该类别。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>FamilyNum</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Survived   Age  SibSp  Parch     Fare  FamilyNum  Pclass_2  Pclass_3  \\\n",
       "0        0  22.0      1      0   7.2500          1         0         1   \n",
       "1        1  38.0      1      0  71.2833          1         0         0   \n",
       "2        1  26.0      0      0   7.9250          0         0         1   \n",
       "3        1  35.0      1      0  53.1000          1         0         0   \n",
       "4        0  35.0      0      0   8.0500          0         0         1   \n",
       "\n",
       "   Sex_male  \n",
       "0         1  \n",
       "1         0  \n",
       "2         0  \n",
       "3         0  \n",
       "4         1  "
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_titanic_train = pd.get_dummies(lr_titanic_train, drop_first=True, columns=[\"Pclass\", \"Sex\"],dtype=int)\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，我们要把因变量和自变量划分出来。\n",
    "\n",
    "因变量是`Survived`变量，因为我们进行逻辑回归的目的，是根据其它可能对乘客生还概率有影响的变量，来预测幸存情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = lr_titanic_train[\"Survived\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以把除`Survived`之外的先纳入自变量，但需要查看它们之间的相关性。如果其中有些变量之间相关性很高，会导致共线性。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>FamilyNum</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.232625</td>\n",
       "      <td>-0.179191</td>\n",
       "      <td>0.091566</td>\n",
       "      <td>-0.248512</td>\n",
       "      <td>0.006589</td>\n",
       "      <td>-0.281004</td>\n",
       "      <td>0.084153</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SibSp</th>\n",
       "      <td>-0.232625</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.414838</td>\n",
       "      <td>0.159651</td>\n",
       "      <td>0.890712</td>\n",
       "      <td>-0.055932</td>\n",
       "      <td>0.092548</td>\n",
       "      <td>-0.114631</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Parch</th>\n",
       "      <td>-0.179191</td>\n",
       "      <td>0.414838</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.216225</td>\n",
       "      <td>0.783111</td>\n",
       "      <td>-0.000734</td>\n",
       "      <td>0.015790</td>\n",
       "      <td>-0.245489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare</th>\n",
       "      <td>0.091566</td>\n",
       "      <td>0.159651</td>\n",
       "      <td>0.216225</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.217138</td>\n",
       "      <td>-0.118557</td>\n",
       "      <td>-0.413333</td>\n",
       "      <td>-0.182333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>FamilyNum</th>\n",
       "      <td>-0.248512</td>\n",
       "      <td>0.890712</td>\n",
       "      <td>0.783111</td>\n",
       "      <td>0.217138</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.038594</td>\n",
       "      <td>0.071142</td>\n",
       "      <td>-0.200988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass_2</th>\n",
       "      <td>0.006589</td>\n",
       "      <td>-0.055932</td>\n",
       "      <td>-0.000734</td>\n",
       "      <td>-0.118557</td>\n",
       "      <td>-0.038594</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.565210</td>\n",
       "      <td>-0.064746</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass_3</th>\n",
       "      <td>-0.281004</td>\n",
       "      <td>0.092548</td>\n",
       "      <td>0.015790</td>\n",
       "      <td>-0.413333</td>\n",
       "      <td>0.071142</td>\n",
       "      <td>-0.565210</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.137143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex_male</th>\n",
       "      <td>0.084153</td>\n",
       "      <td>-0.114631</td>\n",
       "      <td>-0.245489</td>\n",
       "      <td>-0.182333</td>\n",
       "      <td>-0.200988</td>\n",
       "      <td>-0.064746</td>\n",
       "      <td>0.137143</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                Age     SibSp     Parch      Fare  FamilyNum  Pclass_2  \\\n",
       "Age        1.000000 -0.232625 -0.179191  0.091566  -0.248512  0.006589   \n",
       "SibSp     -0.232625  1.000000  0.414838  0.159651   0.890712 -0.055932   \n",
       "Parch     -0.179191  0.414838  1.000000  0.216225   0.783111 -0.000734   \n",
       "Fare       0.091566  0.159651  0.216225  1.000000   0.217138 -0.118557   \n",
       "FamilyNum -0.248512  0.890712  0.783111  0.217138   1.000000 -0.038594   \n",
       "Pclass_2   0.006589 -0.055932 -0.000734 -0.118557  -0.038594  1.000000   \n",
       "Pclass_3  -0.281004  0.092548  0.015790 -0.413333   0.071142 -0.565210   \n",
       "Sex_male   0.084153 -0.114631 -0.245489 -0.182333  -0.200988 -0.064746   \n",
       "\n",
       "           Pclass_3  Sex_male  \n",
       "Age       -0.281004  0.084153  \n",
       "SibSp      0.092548 -0.114631  \n",
       "Parch      0.015790 -0.245489  \n",
       "Fare      -0.413333 -0.182333  \n",
       "FamilyNum  0.071142 -0.200988  \n",
       "Pclass_2  -0.565210 -0.064746  \n",
       "Pclass_3   1.000000  0.137143  \n",
       "Sex_male   0.137143  1.000000  "
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = lr_titanic_train.drop([\"Survived\"],axis=1)\n",
    "X.corr()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一般我们认为，当相关系数的绝对值大于0.8的时候，可能导致严重共线性，所以我们检查的时候，找绝对值大于0.8的值即可。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>FamilyNum</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SibSp</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Parch</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>FamilyNum</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass_2</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass_3</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex_male</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Age  SibSp  Parch   Fare  FamilyNum  Pclass_2  Pclass_3  Sex_male\n",
       "Age         True  False  False  False      False     False     False     False\n",
       "SibSp      False   True  False  False       True     False     False     False\n",
       "Parch      False  False   True  False      False     False     False     False\n",
       "Fare       False  False  False   True      False     False     False     False\n",
       "FamilyNum  False   True  False  False       True     False     False     False\n",
       "Pclass_2   False  False  False  False      False      True     False     False\n",
       "Pclass_3   False  False  False  False      False     False      True     False\n",
       "Sex_male   False  False  False  False      False     False     False      True"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.corr().abs() > 0.8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从以上输出来看，`SibSp`和`FamilyNum`之间的相关系数绝对值大于0.8。这符合预期，因为`FamilyNum`是根据`SibSp`和`Parch`计算出来的。\n",
    "\n",
    "不同变量之间的如果相关性过高，会导致数值优化算法无法收敛，无法获得逻辑回归模型参数的计算结果，因此我们需要移除`FamilyNum`或`SibSp`。我们对同乘家庭成员是否会影响幸存概率感兴趣，所以保留`FamilyNum`。\n",
    "\n",
    "此外，如果仔细看相关系数数值，会发现`Parch`和`FamilyNum`之间也存在强相关，相关系数为0.78，接近0.8，因此我们也对`Parch`进行移除，避免算法无法收敛。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = X.drop([\"SibSp\", \"Parch\"], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，给模型的线性方程添加截距。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = sm.add_constant(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下一步就可以调用`Logit`函数，利用最大似然优化来得到逻辑回归模型的参数值，并输出总结信息。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully.\n",
      "         Current function value: 0.443547\n",
      "         Iterations 6\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<caption>Logit Regression Results</caption>\n",
       "<tr>\n",
       "  <th>Dep. Variable:</th>       <td>Survived</td>     <th>  No. Observations:  </th>  <td>   891</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Model:</th>                 <td>Logit</td>      <th>  Df Residuals:      </th>  <td>   884</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Method:</th>                 <td>MLE</td>       <th>  Df Model:          </th>  <td>     6</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Date:</th>            <td>Fri, 06 Jun 2025</td> <th>  Pseudo R-squ.:     </th>  <td>0.3339</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Time:</th>                <td>20:32:19</td>     <th>  Log-Likelihood:    </th> <td> -395.20</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>converged:</th>             <td>True</td>       <th>  LL-Null:           </th> <td> -593.33</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Covariance Type:</th>     <td>nonrobust</td>    <th>  LLR p-value:       </th> <td>1.786e-82</td>\n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>z</th>      <th>P>|z|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>const</th>     <td>    3.8097</td> <td>    0.445</td> <td>    8.568</td> <td> 0.000</td> <td>    2.938</td> <td>    4.681</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Age</th>       <td>   -0.0388</td> <td>    0.008</td> <td>   -4.963</td> <td> 0.000</td> <td>   -0.054</td> <td>   -0.023</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Fare</th>      <td>    0.0032</td> <td>    0.002</td> <td>    1.311</td> <td> 0.190</td> <td>   -0.002</td> <td>    0.008</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>FamilyNum</th> <td>   -0.2430</td> <td>    0.068</td> <td>   -3.594</td> <td> 0.000</td> <td>   -0.376</td> <td>   -0.110</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Pclass_2</th>  <td>   -1.0003</td> <td>    0.293</td> <td>   -3.416</td> <td> 0.001</td> <td>   -1.574</td> <td>   -0.426</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Pclass_3</th>  <td>   -2.1324</td> <td>    0.289</td> <td>   -7.373</td> <td> 0.000</td> <td>   -2.699</td> <td>   -1.566</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Sex_male</th>  <td>   -2.7759</td> <td>    0.199</td> <td>  -13.980</td> <td> 0.000</td> <td>   -3.165</td> <td>   -2.387</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/latex": [
       "\\begin{center}\n",
       "\\begin{tabular}{lclc}\n",
       "\\toprule\n",
       "\\textbf{Dep. Variable:}   &     Survived     & \\textbf{  No. Observations:  } &      891    \\\\\n",
       "\\textbf{Model:}           &      Logit       & \\textbf{  Df Residuals:      } &      884    \\\\\n",
       "\\textbf{Method:}          &       MLE        & \\textbf{  Df Model:          } &        6    \\\\\n",
       "\\textbf{Date:}            & Fri, 06 Jun 2025 & \\textbf{  Pseudo R-squ.:     } &   0.3339    \\\\\n",
       "\\textbf{Time:}            &     20:32:19     & \\textbf{  Log-Likelihood:    } &   -395.20   \\\\\n",
       "\\textbf{converged:}       &       True       & \\textbf{  LL-Null:           } &   -593.33   \\\\\n",
       "\\textbf{Covariance Type:} &    nonrobust     & \\textbf{  LLR p-value:       } & 1.786e-82   \\\\\n",
       "\\bottomrule\n",
       "\\end{tabular}\n",
       "\\begin{tabular}{lcccccc}\n",
       "                   & \\textbf{coef} & \\textbf{std err} & \\textbf{z} & \\textbf{P$> |$z$|$} & \\textbf{[0.025} & \\textbf{0.975]}  \\\\\n",
       "\\midrule\n",
       "\\textbf{const}     &       3.8097  &        0.445     &     8.568  &         0.000        &        2.938    &        4.681     \\\\\n",
       "\\textbf{Age}       &      -0.0388  &        0.008     &    -4.963  &         0.000        &       -0.054    &       -0.023     \\\\\n",
       "\\textbf{Fare}      &       0.0032  &        0.002     &     1.311  &         0.190        &       -0.002    &        0.008     \\\\\n",
       "\\textbf{FamilyNum} &      -0.2430  &        0.068     &    -3.594  &         0.000        &       -0.376    &       -0.110     \\\\\n",
       "\\textbf{Pclass\\_2} &      -1.0003  &        0.293     &    -3.416  &         0.001        &       -1.574    &       -0.426     \\\\\n",
       "\\textbf{Pclass\\_3} &      -2.1324  &        0.289     &    -7.373  &         0.000        &       -2.699    &       -1.566     \\\\\n",
       "\\textbf{Sex\\_male} &      -2.7759  &        0.199     &   -13.980  &         0.000        &       -3.165    &       -2.387     \\\\\n",
       "\\bottomrule\n",
       "\\end{tabular}\n",
       "%\\caption{Logit Regression Results}\n",
       "\\end{center}"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.summary.Summary'>\n",
       "\"\"\"\n",
       "                           Logit Regression Results                           \n",
       "==============================================================================\n",
       "Dep. Variable:               Survived   No. Observations:                  891\n",
       "Model:                          Logit   Df Residuals:                      884\n",
       "Method:                           MLE   Df Model:                            6\n",
       "Date:                Fri, 06 Jun 2025   Pseudo R-squ.:                  0.3339\n",
       "Time:                        20:32:19   Log-Likelihood:                -395.20\n",
       "converged:                       True   LL-Null:                       -593.33\n",
       "Covariance Type:            nonrobust   LLR p-value:                 1.786e-82\n",
       "==============================================================================\n",
       "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
       "------------------------------------------------------------------------------\n",
       "const          3.8097      0.445      8.568      0.000       2.938       4.681\n",
       "Age           -0.0388      0.008     -4.963      0.000      -0.054      -0.023\n",
       "Fare           0.0032      0.002      1.311      0.190      -0.002       0.008\n",
       "FamilyNum     -0.2430      0.068     -3.594      0.000      -0.376      -0.110\n",
       "Pclass_2      -1.0003      0.293     -3.416      0.001      -1.574      -0.426\n",
       "Pclass_3      -2.1324      0.289     -7.373      0.000      -2.699      -1.566\n",
       "Sex_male      -2.7759      0.199    -13.980      0.000      -3.165      -2.387\n",
       "==============================================================================\n",
       "\"\"\""
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = sm.Logit(y, X).fit()\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当我们把显著区间设定为0.05时，以上结果的P值可以看出，模型认为船票价格对乘客幸存概率没有显著性影响。因此可以把这个变量移除后，再次建立逻辑回归模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully.\n",
      "         Current function value: 0.444623\n",
      "         Iterations 6\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<caption>Logit Regression Results</caption>\n",
       "<tr>\n",
       "  <th>Dep. Variable:</th>       <td>Survived</td>     <th>  No. Observations:  </th>  <td>   891</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Model:</th>                 <td>Logit</td>      <th>  Df Residuals:      </th>  <td>   885</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Method:</th>                 <td>MLE</td>       <th>  Df Model:          </th>  <td>     5</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Date:</th>            <td>Fri, 06 Jun 2025</td> <th>  Pseudo R-squ.:     </th>  <td>0.3323</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Time:</th>                <td>20:34:02</td>     <th>  Log-Likelihood:    </th> <td> -396.16</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>converged:</th>             <td>True</td>       <th>  LL-Null:           </th> <td> -593.33</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Covariance Type:</th>     <td>nonrobust</td>    <th>  LLR p-value:       </th> <td>4.927e-83</td>\n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>z</th>      <th>P>|z|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>const</th>     <td>    4.0620</td> <td>    0.404</td> <td>   10.049</td> <td> 0.000</td> <td>    3.270</td> <td>    4.854</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Age</th>       <td>   -0.0395</td> <td>    0.008</td> <td>   -5.065</td> <td> 0.000</td> <td>   -0.055</td> <td>   -0.024</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>FamilyNum</th> <td>   -0.2186</td> <td>    0.065</td> <td>   -3.383</td> <td> 0.001</td> <td>   -0.345</td> <td>   -0.092</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Pclass_2</th>  <td>   -1.1798</td> <td>    0.261</td> <td>   -4.518</td> <td> 0.000</td> <td>   -1.692</td> <td>   -0.668</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Pclass_3</th>  <td>   -2.3458</td> <td>    0.242</td> <td>   -9.676</td> <td> 0.000</td> <td>   -2.821</td> <td>   -1.871</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Sex_male</th>  <td>   -2.7854</td> <td>    0.198</td> <td>  -14.069</td> <td> 0.000</td> <td>   -3.173</td> <td>   -2.397</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/latex": [
       "\\begin{center}\n",
       "\\begin{tabular}{lclc}\n",
       "\\toprule\n",
       "\\textbf{Dep. Variable:}   &     Survived     & \\textbf{  No. Observations:  } &      891    \\\\\n",
       "\\textbf{Model:}           &      Logit       & \\textbf{  Df Residuals:      } &      885    \\\\\n",
       "\\textbf{Method:}          &       MLE        & \\textbf{  Df Model:          } &        5    \\\\\n",
       "\\textbf{Date:}            & Fri, 06 Jun 2025 & \\textbf{  Pseudo R-squ.:     } &   0.3323    \\\\\n",
       "\\textbf{Time:}            &     20:34:02     & \\textbf{  Log-Likelihood:    } &   -396.16   \\\\\n",
       "\\textbf{converged:}       &       True       & \\textbf{  LL-Null:           } &   -593.33   \\\\\n",
       "\\textbf{Covariance Type:} &    nonrobust     & \\textbf{  LLR p-value:       } & 4.927e-83   \\\\\n",
       "\\bottomrule\n",
       "\\end{tabular}\n",
       "\\begin{tabular}{lcccccc}\n",
       "                   & \\textbf{coef} & \\textbf{std err} & \\textbf{z} & \\textbf{P$> |$z$|$} & \\textbf{[0.025} & \\textbf{0.975]}  \\\\\n",
       "\\midrule\n",
       "\\textbf{const}     &       4.0620  &        0.404     &    10.049  &         0.000        &        3.270    &        4.854     \\\\\n",
       "\\textbf{Age}       &      -0.0395  &        0.008     &    -5.065  &         0.000        &       -0.055    &       -0.024     \\\\\n",
       "\\textbf{FamilyNum} &      -0.2186  &        0.065     &    -3.383  &         0.001        &       -0.345    &       -0.092     \\\\\n",
       "\\textbf{Pclass\\_2} &      -1.1798  &        0.261     &    -4.518  &         0.000        &       -1.692    &       -0.668     \\\\\n",
       "\\textbf{Pclass\\_3} &      -2.3458  &        0.242     &    -9.676  &         0.000        &       -2.821    &       -1.871     \\\\\n",
       "\\textbf{Sex\\_male} &      -2.7854  &        0.198     &   -14.069  &         0.000        &       -3.173    &       -2.397     \\\\\n",
       "\\bottomrule\n",
       "\\end{tabular}\n",
       "%\\caption{Logit Regression Results}\n",
       "\\end{center}"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.summary.Summary'>\n",
       "\"\"\"\n",
       "                           Logit Regression Results                           \n",
       "==============================================================================\n",
       "Dep. Variable:               Survived   No. Observations:                  891\n",
       "Model:                          Logit   Df Residuals:                      885\n",
       "Method:                           MLE   Df Model:                            5\n",
       "Date:                Fri, 06 Jun 2025   Pseudo R-squ.:                  0.3323\n",
       "Time:                        20:34:02   Log-Likelihood:                -396.16\n",
       "converged:                       True   LL-Null:                       -593.33\n",
       "Covariance Type:            nonrobust   LLR p-value:                 4.927e-83\n",
       "==============================================================================\n",
       "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
       "------------------------------------------------------------------------------\n",
       "const          4.0620      0.404     10.049      0.000       3.270       4.854\n",
       "Age           -0.0395      0.008     -5.065      0.000      -0.055      -0.024\n",
       "FamilyNum     -0.2186      0.065     -3.383      0.001      -0.345      -0.092\n",
       "Pclass_2      -1.1798      0.261     -4.518      0.000      -1.692      -0.668\n",
       "Pclass_3      -2.3458      0.242     -9.676      0.000      -2.821      -1.871\n",
       "Sex_male      -2.7854      0.198    -14.069      0.000      -3.173      -2.397\n",
       "==============================================================================\n",
       "\"\"\""
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = X.drop([\"Fare\"], axis=1)\n",
    "model = sm.Logit(y, X).fit()\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "逻辑回归模型预测以下因素的增加（或存在）会降低幸存概率：年龄、同乘家庭成员数、不在一等舱、性别为男性。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "要理解各个各个自变量系数的实际含义，我们需要计算自然常数的次方。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.9612699539905982)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Age\n",
    "np.exp(-0.0395)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，年龄每增加1岁，生还概率降低4%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.803643111115195)"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# FamilyNum\n",
    "np.exp(-0.2186)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，年龄每增加1岁，生还概率降低20%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.30734020049483596)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Pclass_2\n",
    "np.exp(-1.1798)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，二等舱乘客的生还概率比一等舱乘客低70%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.09577055503172162)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Pclass_3\n",
    "np.exp(-2.3458)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，三等舱乘客的生还概率比一等舱乘客低90%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.061704402333015156)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Sex_male\n",
    "np.exp(-2.7854)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上结果说明，男性乘客的生还概率比女性乘客低94%左右。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据模型参数值，我们总结：\n",
    "- 年龄小的乘客幸存概率更高；\n",
    "- 女性乘客的生还率比男性乘客的幸存概率更高；\n",
    "- 来自的船舱等级高的乘客幸存概率更高；\n",
    "- 同乘家庭成员少的乘客幸存概率更高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "前两条背后的原因可能与泰坦尼克号沉船后逃生时，“让孩子和女性先走”的原则。第三条说明可能当时舱位更尊贵的乘客拥有了优先逃生的机会。第四条可能是因为拥有较大数量家庭成员的乘客在灾难发生时会急于解救其他家庭成员而非选择逃生，最后也失去了自己逃生的机会。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "得到模型后，我们将用于预测`titanic_test.csv`里泰坦尼克号乘客的生还情况。\n",
    "\n",
    "首先读取`titanic_test.csv`的数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>3</td>\n",
       "      <td>Kelly, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>3</td>\n",
       "      <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
       "      <td>female</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>2</td>\n",
       "      <td>Myles, Mr. Thomas Francis</td>\n",
       "      <td>male</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>3</td>\n",
       "      <td>Wirz, Mr. Albert</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>3</td>\n",
       "      <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Pclass                                          Name     Sex  \\\n",
       "0          892       3                              Kelly, Mr. James    male   \n",
       "1          893       3              Wilkes, Mrs. James (Ellen Needs)  female   \n",
       "2          894       2                     Myles, Mr. Thomas Francis    male   \n",
       "3          895       3                              Wirz, Mr. Albert    male   \n",
       "4          896       3  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  female   \n",
       "\n",
       "    Age  SibSp  Parch   Ticket     Fare Cabin Embarked  \n",
       "0  34.5      0      0   330911   7.8292   NaN        Q  \n",
       "1  47.0      1      0   363272   7.0000   NaN        S  \n",
       "2  62.0      0      0   240276   9.6875   NaN        Q  \n",
       "3  27.0      0      0   315154   8.6625   NaN        S  \n",
       "4  22.0      1      1  3101298  12.2875   NaN        S  "
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic_test = pd.read_csv(\"titanic_test.csv\")\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于逻辑回归模型不允许数据中有缺失值，因此我们需要检查`titanic_test`是否存在数据缺失。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 418 entries, 0 to 417\n",
      "Data columns (total 11 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  418 non-null    int64  \n",
      " 1   Pclass       418 non-null    int64  \n",
      " 2   Name         418 non-null    object \n",
      " 3   Sex          418 non-null    object \n",
      " 4   Age          332 non-null    float64\n",
      " 5   SibSp        418 non-null    int64  \n",
      " 6   Parch        418 non-null    int64  \n",
      " 7   Ticket       418 non-null    object \n",
      " 8   Fare         417 non-null    float64\n",
      " 9   Cabin        91 non-null     object \n",
      " 10  Embarked     418 non-null    object \n",
      "dtypes: float64(2), int64(4), object(5)\n",
      "memory usage: 36.1+ KB\n"
     ]
    }
   ],
   "source": [
    "titanic_test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从以上输出可见，`Age`、`Fare`、`Cabin`存在缺失值。其中`Fare`和`Cabin`不属于回归模型的自变量，即使缺失也不会影响预测，因此可以忽略；`Age`需要我们进行和针对`cleaned_titanic_train`同样的操作，即用平均值填充。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(0)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic_test[\"Age\"] = titanic_test[\"Age\"].fillna(titanic_test[\"Age\"].mean())\n",
    "titanic_test[\"Age\"].isna().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下一步是给模型中的分类变量引入虚拟变量，但在引入前我们需要先把分类变量的类型转换为Category，并且通过`categories`参数，让程序知道所有可能的分类值。这样做的原因是，预测数据包含的分类可能不全。我们需要确保引入虚拟变量的时候，不会漏掉某个或某些分类。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "titanic_test[\"Pclass\"] = pd.Categorical(titanic_test[\"Pclass\"], categories=[\"1\",\"2\",\"3\"])\n",
    "titanic_test[\"Sex\"] = pd.Categorical(titanic_test[\"Sex\"], categories=[\"female\",\"male\"])\n",
    "titanic_test[\"Embarked\"] = pd.Categorical(titanic_test[\"Embarked\"], categories=[\"C\",\"Q\",\"S\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下一步，给模型用到的分类变量引入虚拟变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Name</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>Kelly, Mr. James</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>Myles, Mr. Thomas Francis</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>Wirz, Mr. Albert</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId                                          Name   Age  SibSp  \\\n",
       "0          892                              Kelly, Mr. James  34.5      0   \n",
       "1          893              Wilkes, Mrs. James (Ellen Needs)  47.0      1   \n",
       "2          894                     Myles, Mr. Thomas Francis  62.0      0   \n",
       "3          895                              Wirz, Mr. Albert  27.0      0   \n",
       "4          896  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  22.0      1   \n",
       "\n",
       "   Parch   Ticket     Fare Cabin Embarked  Pclass_2  Pclass_3  Sex_male  \n",
       "0      0   330911   7.8292   NaN        Q         0         0         1  \n",
       "1      0   363272   7.0000   NaN        S         0         0         0  \n",
       "2      0   240276   9.6875   NaN        Q         0         0         1  \n",
       "3      0   315154   8.6625   NaN        S         0         0         1  \n",
       "4      1  3101298  12.2875   NaN        S         0         0         0  "
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic_test = pd.get_dummies(titanic_test, drop_first=True, columns=[\"Pclass\",\"Sex\"],dtype=int)\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看一下模型需要的输入变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "const        4.061982\n",
       "Age         -0.039495\n",
       "FamilyNum   -0.218627\n",
       "Pclass_2    -1.179763\n",
       "Pclass_3    -2.345823\n",
       "Sex_male    -2.785398\n",
       "dtype: float64"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.params"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于我们在数据整理步骤建立了`FamilyNum`变量，此处也需要对预测数据加上此变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Name</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>Kelly, Mr. James</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>Myles, Mr. Thomas Francis</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>Wirz, Mr. Albert</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId                                          Name   Age  SibSp  \\\n",
       "0          892                              Kelly, Mr. James  34.5      0   \n",
       "1          893              Wilkes, Mrs. James (Ellen Needs)  47.0      1   \n",
       "2          894                     Myles, Mr. Thomas Francis  62.0      0   \n",
       "3          895                              Wirz, Mr. Albert  27.0      0   \n",
       "4          896  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  22.0      1   \n",
       "\n",
       "   Parch   Ticket     Fare Cabin Embarked  Pclass_2  Pclass_3  Sex_male  \\\n",
       "0      0   330911   7.8292   NaN        Q         0         0         1   \n",
       "1      0   363272   7.0000   NaN        S         0         0         0   \n",
       "2      0   240276   9.6875   NaN        Q         0         0         1   \n",
       "3      0   315154   8.6625   NaN        S         0         0         1   \n",
       "4      1  3101298  12.2875   NaN        S         0         0         0   \n",
       "\n",
       "   FamilyNum  \n",
       "0          0  \n",
       "1          1  \n",
       "2          0  \n",
       "3          0  \n",
       "4          2  "
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic_test['FamilyNum'] = titanic_test['SibSp'] + titanic_test['Parch']\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来构建我们要输入给模型进行预测的变量，需要和模型训练时的输入一致。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test = titanic_test[[\"Age\",\"Sex_male\",\"Pclass_2\",\"Pclass_3\",\"Sex_male\"]]\n",
    "X_test = sm.add_constant(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在就可以调用逻辑回归模型的`predict`方法，获得预测的幸存概率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      0.424427\n",
       "1      0.900761\n",
       "2      0.199289\n",
       "3      0.497897\n",
       "4      0.960573\n",
       "         ...   \n",
       "413    0.465638\n",
       "414    0.925647\n",
       "415    0.386368\n",
       "416    0.465638\n",
       "417    0.465638\n",
       "Length: 418, dtype: float64"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predicted_value = model.predict(X_test)\n",
    "predicted_value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们获得了逻辑回归模型预测的`titanic_test.csv`里，泰坦尼克号乘客的幸存概率。我们可以把概率大于等于0.5的预测为幸存，小于0.5的预测为遇难，输出一下这个最终的预测结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      False\n",
       "1       True\n",
       "2      False\n",
       "3      False\n",
       "4       True\n",
       "       ...  \n",
       "413    False\n",
       "414     True\n",
       "415    False\n",
       "416    False\n",
       "417    False\n",
       "Length: 418, dtype: bool"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predicted_value > 0.5"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
